<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>GYLEE</title>
    <link>https://gylee815.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 4 Aug 2026 19:55:20 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>ManMan</managingEditor>
    <item>
      <title>[IHOS 1기] 7주차 - 이스티오 스케일링, 데이터 플레인 확장</title>
      <link>https://gylee815.tistory.com/36</link>
      <description>&lt;h2 id=&quot;block-1fbb8b2c1c2380e68d19d4450f0d9579&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 24px; margin-top: 1rem; color: #37352f; letter-spacing: normal; background-color: #ffffff;&quot; data-ke-size=&quot;size26&quot;&gt;12. 이스티오 스케일링하기&lt;/h2&gt;
&lt;div id=&quot;block-1fbb8b2c1c238056838ff569913200fa&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;This chapter covers&lt;/code&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Scaling Istio in your organization&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fbb8b2c1c23807eb59fcbe993615233&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여러 클러스터에서 서비스 메시 스케일링하기 Scaling the service mesh in multiple clusters&lt;/li&gt;
&lt;li id=&quot;block-1fbb8b2c1c238030bddade93fbad19d0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;두 클러스터를 합치기 위한 전체 조건 해결하기 Resolving the prerequisites to join two clusters&lt;/li&gt;
&lt;li id=&quot;block-1fbb8b2c1c23801e95ade33604191e58&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여러 클러스터의 워크로드 간에 공통 신뢰 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;common trust&lt;/span&gt; 설정하기 Setting up common trust between workloads of different clusters&lt;/li&gt;
&lt;li id=&quot;block-1fbb8b2c1c23806095b0d70d56451a90&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 간 워크로드 찾기 Discovering cross-cluster workloads&lt;/li&gt;
&lt;li id=&quot;block-1fbb8b2c1c23800c8cdfc550645f058c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;east-west 트래픽을 위한 이스티오 인그레스 게이트웨이 설정하기 Configuring Istio&amp;rsquo;s ingress gateway for east-west traffic&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fbb8b2c1c2380db8cfef74f06ce4076&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : 다중 클러스터 서비스 메시&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fbb8b2c1c23802490adfbb1fb8bcdcf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지금까지는 단일 클러스터의 메시 내에서 활성화하는 이스티오의 여러 기능을 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1fbb8b2c1c2380e1a834c1aaf9843ed6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 서비스 메시는 단일 클러스터에 종속되지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1fbb8b2c1c238091ae03d3e4d74d8d29&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 메시는 여러 클러스터에 걸쳐 있을 수 있으며, 클러스터 모두에 동일한 기능을 제공할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fbb8b2c1c2380a8b580d2fb0c9e8af5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사실 메시의 가치는 워크로드가 많아질수록 증가한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fbb8b2c1c23804e8777e03e9911b168&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fbb8b2c1c2380a0a3ebcceaf181f866&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그런데 우리는 언제 서비스 메시가 여러 클러스터에 걸쳐 있길 원하는가?&lt;/li&gt;
&lt;li id=&quot;block-1fbb8b2c1c2380f6aafcf47ece93fcce&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;단일 클러스터와 비교할 때 다중 클러스터 서비스 메시는 어떤 이점을 갖는가?&lt;/li&gt;
&lt;li id=&quot;block-1fbb8b2c1c2380b0b165e937c734abd0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이와 같은 질문에 답하기 위해 가상의 ACME사를 다시 살펴보자.&lt;/li&gt;
&lt;li id=&quot;block-1fbb8b2c1c238063a934dd5bd3d7a2b6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 회사는 클라우드 플랫폼으로 이전했고, 마이크로서비스 아키텍처 때문에 늘어난 네트워크 복잡성을 모두 경험했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380339b18d79c3e0c93e9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1fcb8b2c1c2380af8404ec6b20296d3c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;12.1. 다중 클러스터 서비스 메시의 이점&lt;/p&gt;
&lt;div id=&quot;block-1fcb8b2c1c23808799dedfa47d2e5075&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;소개 : The benefits of a &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;multi-cluster service mesh&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/ops/deployment/deployment-models/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23803499eecc77bfaedb05&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클라우드 마이그레이션 초기에 ACME는 클러스터의 규모를 어떻게 조정할지에 대한 딜레마에 직면했다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380709dcfee84f8df9170&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 회사는 단일 클러스터로 시작했지만 그 결정을 신속하게 바꿨다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380ae85c0d01627efb0d9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ACME는 다음과 같은 이점 때문에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;작은 클러스터 다수&lt;/span&gt;을 쓰기로 결정했다.
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238029957dfc5b5059e87b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;한 팀의 사고가 다른 팀에 영향을 미치지 않게 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23808e974dde7bb6a5f524&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 전체에 영향을 미칠 수 있는 설정이나 운영에 경계선을 설정해 클러스터가 다운될 때 아키텍처의 다른 부분에 미치는 영향을 줄인다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238080a621ecbc4bf8bb3b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아키텍처의 다른 부분에서 민감 데이터로 접근하는 서비스를 제한한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380369fe7e8494b41bcca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;가용성을 늘리기 위해 여러 리전에서 클러스터를 운영하고, 가장 가까운 클러스터로 트래픽을 라우팅해 지연 시간을 줄인다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e0a109cc0e33c73e77&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서로 다른 클라우드 프로바이더 또는 하이브리드 클라우드와 같이 다양한 환경에서 워크로드를 실행할 수 있게 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d0b264f7cea7823a78&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;격리성 강화&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Improved isolation&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380ca961dedda0e280012&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;장애 경계&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Failure boundary&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23804ab658f40f096aaada&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;규정 준수&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Regulatory and compliance&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380a990c6e92385239624&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;가용성 및 성능 향상&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Increased availability and performance&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23808d96f4e843bbdd9182&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다중 및 하이브리드 클라우드&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Multi and hybrid clouds&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c0be6fdf23c8fbf976&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380838718e626d2162ff6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;초기 평가에서 ACME가 서비시 메시를 채택하는 데 주요 동기로 삼았던 것은&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 여러 클러스터 간에 서비스 메시를 확장&lt;/span&gt;할 수 있는 기능과, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 간에 트래픽 관리, 관찰 가능성, 보안을 지원&lt;/span&gt;하는 기능이었다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23806abd88f0a8ced3148e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다중 클러스터 작업을 지원하고자 회사는 두 가지 접근법을 고려했다 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/ops/deployment/deployment-models/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238097bcf2dc1310b581d3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다중 클러스터 서비스 메시&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Multi-cluster service mesh&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380aa84d7c849ef2e78ba&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://istio.io/latest/docs/ops/deployment/deployment-models/#multiple-clusters&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://assets.super.so/b27a22c8-1220-4332-8c7b-b84c768ca5d7/images/7af4673f-7251-409f-8385-dcba8556b941/multi-cluster.svg&quot; alt=&quot;https://istio.io/latest/docs/ops/deployment/deployment-models/#multiple-clusters&quot; width=&quot;864&quot; height=&quot;563.4782608695652&quot; data-nimg=&quot;1&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238016a7fdcd5cbf346f1c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여러 클러스터에 걸쳐 있고 워크로드가 클러스터 간에 트래픽을 라우팅하도록 설정하는 메시. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;A mesh that spans multiple clusters and configures workloads to route cross-cluster traffic.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380bf85bed32b6d6e8b20&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 모든 것은 VirtualService, DestinationRule, Sidecar 등이 적용된 Istio 구성을 따른다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;All of this is in accordance with the applied Istio configuration&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23806c8463f46bcb66db19&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23805e8cd9fc4bce04e6e6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메시 연합 &lt;/span&gt;(다중 메시) &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Mesh federation, also known as multi-mesh&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a09676cf5fd40f8a3f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://istio.io/latest/docs/ops/deployment/deployment-models/#multiple-meshes&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://assets.super.so/b27a22c8-1220-4332-8c7b-b84c768ca5d7/images/994f682f-8012-4569-956c-d6afaa4b6b6c/multi-mesh.svg&quot; alt=&quot;https://istio.io/latest/docs/ops/deployment/deployment-models/#multiple-meshes&quot; width=&quot;672&quot; height=&quot;458.18181818181813&quot; data-nimg=&quot;1&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238026b5e8c428e828d0f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;개별 서비스 메시 2개의 워크로드 간 통신을 노출하고 활성화한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Exposes and enables the communication of workloads of two separate service meshes.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238022b987d8dd8f011418&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 선택지는 덜 자동화돼 있어서 서비스 간 트래픽을 설정하려면 두 메시 모두에게 수동 설정이 필요한다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23803f828def781d91a05c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 서로 다른 팀에서 두 메시를 운영하거나 보안 격리 요구 사항이 엄격한 경우 좋은 선택지다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23800bbdcad3fc76c3942f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b2b88bdbd39b806143&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 책에서 다루는 선택지는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다중 클러스터 서비스&lt;/span&gt; 메시다. 메시 연합 같은 경우에는 공식 문서를 참고하자 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/ops/deployment/deployment-models/#multiple-meshes&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380d8be0ef9adbdd335bb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380f48096ec39756a993a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1fcb8b2c1c238065a768d93cb839c37c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;12.2. 다중 클러스터 서비스 메시 개요 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;multi-cluster service mesh&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1fcb8b2c1c238068af31f763995fe9dc&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;소개 : 필요 사항&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23807a890bf846d6f5a98e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다중 클러스터 서비스 메시는 앱에는 완전히 투명한 방식으로 클러스터 간에 서비스를 연결하면서, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 간&lt;/span&gt; 통신을 위한 서비스 메시의 기능(세밀한 트래픽 제오, 복원력, 관찰 가능성, 보안 등)은 모두 유지한다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238091b541daa8730b3d68&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 다중 클러스터 서비스 메시를 구현하는 방법은 모든 클러스터의 서비스를 퀴리한 다음 이 정보로 서비스 프록시에 클러스터 사이에서 서비스 간 트래픽을 라우팅하는 방법을 설정하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238075a819d92e0589ab00&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 12.1은 클러스터들을 하나의 메시로 결합하는 데 필요한 것을 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380bfb3e5c5788d4b7380&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e67cfb86-2077-45a6-b541-556e1af16a66/CleanShot_2025-05-16_at_09.52.11/w=1200,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e67cfb86-2077-45a6-b541-556e1af16a66/CleanShot_2025-05-16_at_09.52.11/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e67cfb86-2077-45a6-b541-556e1af16a66/CleanShot_2025-05-16_at_09.52.11/w=1200,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;578.9772338867188&quot; height=&quot;398.9843114348891&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380edb03bc328e9e4bc43&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 간 워크로드 디스커버리&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Cross-cluster workload discovery&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380349db6c7176911958b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio 컨트롤 플레인&lt;/span&gt;은 서비스 프록시를 설정하기 위해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;동료 K8S 클러스터의 워크로드&lt;/span&gt;를 찾아야 한다. (K8S 클러스터 API 서버를 상대편 클러스터의 이스티오 컨트롤 플레인에서 접근할 수 있어야 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The control planes must discover the workloads in the peer clusters in order to configure the service proxies (the API server of the clusters must be accessible to Istio&amp;rsquo;s control plane in the opposite cluster).&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380738f64d40ce314ce7d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 간 워크로드 연결성&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Cross-cluster workload connectivity&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238087a95adbc5eaf4e460&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드는 서로 연결돼 있어야 한다. 워크로드 엔드포인트를 인지하고 있어도 커넥션을 시작할 수 없다면 쓸모가 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1fcb8b2c1c23809cb40ef41a81928a18&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 간 공통 신뢰&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Common trust between clusters&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238067b586f88b4c408128&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 보안 기능을 활성화하려면 클러스터 간 워크로드가 서로 인증해야 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Cross-cluster workloads must mutually authenticate to enable the security features of Istio.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23800aa1f3f41b840b5b79&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23801f9d75fdba46fafe80&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 기준들을 충족하면 클러스터가 다른 클러스터에서 실행 중인 워크로드를 인지할 수 있고, 워크로드가 서로 연결될 수 있으며, 워크로드가 이스티오 정책을 사용해 인증하고 인가할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23806d83b4c6813fda124f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이들 모두가 다중 클러스터 서비스 메시를 설정하기 위한 전체 조건이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380e78795e6bda4276e17&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1042.97px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1fcb8b2c1c2380fa8dbde8da4d989b06&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다중 클러스터 연결성과 보안&lt;/span&gt; Multi-cluster connectivity and security 상술했듯이, 이스티오가 클러스터 간에 다중 클러스터 연결을 수립하려면 워크로드는 동료 클러스터의 쿠버네티스 API에 접근하는 방법으로만 찾을 수 있다. 어떤 조직에서는 이것이 바람직하지 않는 보안 태세일 수 있다.&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 각 클러스터가 다른 클러스터의 API 모두에 접근&lt;/span&gt;할 수 있기 때문이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;For some organizations, this may be an undesirable security posture where &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;each cluster&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; has &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;access&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; to &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;all other clusters&amp;rsquo; APIs&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;.&lt;/span&gt;&lt;/i&gt; 이 경우에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메시 연합&lt;/span&gt;이 더 나은 방식이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;In this case, &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;mesh federation&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; is a better approach.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23801c9416fb031bef92f4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23804db3a0fdbdef7c5141&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;12.2.1 이스티오 다중 클러스터 배포 모델&lt;/span&gt; Istio multi-cluster deployment models - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/blog/2020/new-deployment-model/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238033966be0e58a3c0eeb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다중 클러스터 서비스 메시에서는 istio 클러스터 유형을 두 가지로 구분한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238014ae9fde39dea167e6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본 클러스터&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;primary cluster&lt;/span&gt;&lt;/i&gt; : 이스티오 컨트롤 플레인이 설치된 K8S 클러스터 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rarr; 아래 그림 중 왼쪽&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380f194dccaa19e2d6fc5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;원격 클러스터&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;remote cluster&lt;/span&gt;&lt;/i&gt; : 설치된 이스티오 컨트롤 플레인과 떨어져 있는 K8S 클러스터 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rarr; 아래 그림 중 오른쪽&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380d48b92c9e433a86842&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/df6e98e0-44b5-485a-af6a-7b0936ca3b67/CleanShot_2025-05-16_at_10.19.27/w=1080,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/df6e98e0-44b5-485a-af6a-7b0936ca3b67/CleanShot_2025-05-16_at_10.19.27/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/df6e98e0-44b5-485a-af6a-7b0936ca3b67/CleanShot_2025-05-16_at_10.19.27/w=1080,quality=90,fit=scale-down 2x&quot; alt=&quot;기본-원격 배포 모델&quot; width=&quot;498.9772644042969&quot; height=&quot;294.9865591167687&quot; data-nimg=&quot;1&quot; /&gt;기본-원격 배포 모델&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380b193e8eea762514f0a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380ca9a3ae678bf9f6ca1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;달성하고자 하는 가용성 수준에 따라 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;배포 모델&lt;/span&gt; 3가지&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238015a88ed752f0e624e8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본-원격&lt;/span&gt;(컨트롤 플레인 공유) 배포 모델 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;primary-remote (shared control plane) &amp;rarr; 위 그림 12.2&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23801da550d2d29705fd60&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본-기본&lt;/span&gt;(복제된 컨트롤 플레인) 배포 모델 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;primary-primary (replicated control plane) &amp;rarr; 아래 그림 12.3&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380638377de710486e21e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;외부 컨트롤 플레인&lt;/span&gt; 배포 모델 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;external control plane &amp;rarr; 아래 그림 12.4&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380fdb442d064711dac4f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380959079c7f118e6eae0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본-기본&lt;/span&gt;(복제된 컨트롤 플레인) 배포 모델 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;primary-primary (replicated control plane) &lt;/span&gt;&lt;/i&gt;에는 컨트롤 플레인이 여럿이므로 가용성이 높지만, 트레이드오프로 리소스가 더 많이 필요하다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e2a152d76bc5086b31&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이렇게 되면 가용성이 향상는데, 중단 범위가 중단이 발생한 클러스터로 국한되기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23809481d6fc59c0229b55&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 모델을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;복제된 컨트롤 플레인 배포 모델&lt;/span&gt;이라고 부른다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;We refer to this model as the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;replicated&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;control&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;plane&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; deployment model.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238007ba26decc15f334f3&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e653493c-efb7-4b20-bf38-f9407fae09b7/CleanShot_2025-05-16_at_10.26.08/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e653493c-efb7-4b20-bf38-f9407fae09b7/CleanShot_2025-05-16_at_10.26.08/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e653493c-efb7-4b20-bf38-f9407fae09b7/CleanShot_2025-05-16_at_10.26.08/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;기본-기본 배포 모델&quot; width=&quot;720&quot; height=&quot;240.97560975609755&quot; data-nimg=&quot;1&quot; /&gt;기본-기본 배포 모델&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238002ae81de8e65d00574&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380ecb64dca8ccd96413e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;외부 컨트롤 플레인&lt;/span&gt; 배포 모델 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;external control plane&lt;/span&gt;&lt;/i&gt; 은 모든 클러스터가 컨트롤 플레인과 떨어져 있는 배포 모델이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380fe8811fd302f45c3f9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 배포 모델로 클라우드 프로바이더가 이스티오를 관리형 서비스로 제공할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380259411c21d3a9ef3fa&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c2737ede-688f-4f08-ac75-5ef6acf843a3/CleanShot_2025-05-16_at_10.27.24/w=1080,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c2737ede-688f-4f08-ac75-5ef6acf843a3/CleanShot_2025-05-16_at_10.27.24/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c2737ede-688f-4f08-ac75-5ef6acf843a3/CleanShot_2025-05-16_at_10.27.24/w=1080,quality=90,fit=scale-down 2x&quot; alt=&quot;외부 컨트롤 플레인 배포 모델&quot; width=&quot;487.95452880859375&quot; height=&quot;236.9779166549933&quot; data-nimg=&quot;1&quot; /&gt;외부 컨트롤 플레인 배포 모델&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a08a7df3dacc1e6c0d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380019574fde2f6ef9a5e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;12.2.2 다중 클러스터 배포에서 워크로드는 어떻게 찾는가?&lt;/span&gt; How workloads are &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;discovered&lt;/u&gt;&lt;/span&gt; in multi-cluster deployments&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238085a531d2f92f05b234&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 컨트롤 플레인은 쿠버네티스 API 서버와 통신해 서비스 뒤의 서비스와 엔드포인트 같은 서비스 프록시 설정 관련 정보를 수집해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380eda7f0e41f9633252b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;쿠버네티스 API 서버에 요청하는 것은 막강한 일종의 권한인데, 리소스 세부 정보를 조회하고, 민감 정보를 쿼리할 수 있으며, 클러스터를 불량하고 되돌이킬 수 없는 상태로 만들 수 있는 정도로 리소스를 업데이트하거나 지울 수 있기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380028ae2feebf40c662e&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1015px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1fcb8b2c1c23804798f4f826b36642e9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;토큰과 RBAC으로 원격 쿠버네티스 API로의 접근을 보안 처리하는 방법을 다루겠지만, 통찰력 있는 독자는 이 접근법의 트레이드오프를 고려해야 한다. 메시 연합이 어떻게 이 위험성을 완화할 수 있는지 앞 절을 참조하자.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23803cbffdea7d00439419&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c395d9dbe6d38ffd42&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;쿠버네티스는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RBAC&lt;/span&gt;를 이용해&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; API 서버로의 접근을 보호&lt;/span&gt;한다. 쿠버네티스 RBAC은 광범위한 주제로, 이 책의 범위를 벗어난다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e784f4f4e42a6657b0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 클러스터 간 디스커버리를 용이하게 하는데 사용하는 개념 일부를 잠시 언급할 수는 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c2baaef969b20e94e2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 어카운트&lt;/span&gt;는 기계나 서비스 등 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;사람이 아닌 클라이언트에 ID&lt;/span&gt;를 제공한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Service accounts&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; provide identity to non-human clients such as machines or services.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23806193c3da406bb57d3c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 어카운트 토큰&lt;/span&gt;은 서비스 어카운트마다 자동으로 생성돼 해당 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ID 클레임&lt;/span&gt;을 나타낸다. 토큰은 JWT 형식이며 쿠버네티스가 파드에 주입한다. 파드는 이 토큰을 사용해 API 서버에게 (자신의 신원) 인증할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Service account tokens&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; are automatically generated for every service account and represent its &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;identity claim&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;. Tokens are formatted as JSON Web Tokens and are injected by Kubernetes into Pods that can use the tokens to authenticate to the API server.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238070868aedf1cdb6d92f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;롤&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;role&lt;/span&gt; 과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터롤&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;clusterrole&lt;/span&gt; 은 서비스 어카운트나 일반 사용자 같은 ID에 대한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;권한 집합&lt;/span&gt;을 정의한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Roles and cluster roles define the set of &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;permissions&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; for &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;identity&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, such as a service account or a regular user.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1fcb8b2c1c238084b4e2ccf638f5dfe1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 12.5는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt;에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증&lt;/span&gt;과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가&lt;/span&gt;를 제공하는 쿠버네티스 리소스를 시각화한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380b6aad5d87fa6ac9a7d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/1af8b368-2120-4eff-ac6a-84d7f47bf91d/CleanShot_2025-05-16_at_11.00.59/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/1af8b368-2120-4eff-ac6a-84d7f47bf91d/CleanShot_2025-05-16_at_11.00.59/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/1af8b368-2120-4eff-ac6a-84d7f47bf91d/CleanShot_2025-05-16_at_11.00.59/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;istiod의 ID와 접근을 설정하는 리소스&quot; width=&quot;720&quot; height=&quot;470.13698630136986&quot; data-nimg=&quot;1&quot; /&gt;istiod의 ID와 접근을 설정하는 리소스&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238099be91c89189fef5e3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380958d2fdf0e2d734787&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 간 워크로드 디스커버리는 기술적으로 동일한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Cross-cluster workload discovery is technically the same.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238089a72bfa4a0addf8c9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 그림 12.6과 같이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt;에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;원격 클러스터의 서비스 어카운트 토큰을 제공&lt;/span&gt;해야 한다 (구체적인 예제에서 볼 수 있듯이 API 서버로 보안 통신을 시작할 수 있는 인증서와 함께). &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;However, as shown in figure 12.6, we need to provide istiod with the service account token of the remote cluster (along with the certificates to initiate a secure connection to the API server, as we see when we get to the concrete examples).&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23802281e9f869746a9bb8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istiod는 토큰을 사용해 원격 클러스터에 인증하고, 클러스터에서 실행 중인 워크로드를 찾는다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;istiod uses the token to authenticate to remote clusters and discover workloads running in them.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380bcb864e8ec0a739742&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/24938e63-a236-4c59-a829-1f9039ceae67/CleanShot_2025-05-16_at_11.04.07/w=1080,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/24938e63-a236-4c59-a829-1f9039ceae67/CleanShot_2025-05-16_at_11.04.07/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/24938e63-a236-4c59-a829-1f9039ceae67/CleanShot_2025-05-16_at_11.04.07/w=1080,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;528&quot; height=&quot;339.87226890756307&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23800fa648dfca0fba3b53&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23807bb8f1ff15644f3b1a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;험난한 과정처럼 들릴지도 모르지만 걱정할 필요는 없다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380f48a68e02fdb17d924&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 장 뒷부분에서 보겠지만 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istioctl&lt;/span&gt;이 이 과정을 자동화해주기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238093bad7d2a61c47ea8c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23809c803dce2d550827d6&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;12.2.3 클러스터 간 워크로드 연결&lt;/span&gt; Cross-cluster workload &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;connectivity&lt;/u&gt;&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/ops/deployment/deployment-models/#network-models&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east-west gw&lt;/span&gt; or &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;라우팅 처리&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b9ae04f235d89d58cc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다른 전체 조건은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드가 클러스터를 건너 연결&lt;/span&gt;할 수 있어야 한다는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238091936dca1618e17329&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터가 플랫 네트워크 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;flat network&lt;/span&gt; 에 있다면, 그러나까 단일 네트워크를 공유하거나(Amazon VPC 처럼) 네트워크가 네트워크 피어링 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;network peering &lt;/span&gt;으로 연결된 경우 등에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드가 IP 주소로 연결&lt;/span&gt; 할 수 있으므로 조건은 이미 충족됐다!&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238038a35cc145b255c6bb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380f4979bfddbe35d676a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 클러스터가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서로 다른 네트워크&lt;/span&gt;에 있다면 네트워크의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;에지에 위치&lt;/span&gt;해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 간 트래픽을 프록시&lt;/span&gt;해주는 특수한&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 이스티오 인그레스 게이트웨이&lt;/span&gt;를 사용해야 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;However, when clusters are in &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;different networks&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, we have to use &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;special Istio ingress gateways&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; that are located at the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;edge&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; of the network and proxy cross-cluster traffic. &lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380bca588c584aee061dc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다중 네트워크 메시에서 클러스터를 잇는 인그레스 게이트웨이를 east-west 게이트웨이라고 부른다 (그림 12.7 참조). &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Ingress gateways that &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;bridge&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; clusters in &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;multi-network meshes&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; are known as east-west gateways&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238080bce7e5c582a223ac&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e53a27c2-49ab-4dda-ac0b-0145f42b1cca/CleanShot_2025-05-16_at_11.10.10/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e53a27c2-49ab-4dda-ac0b-0145f42b1cca/CleanShot_2025-05-16_at_11.10.10/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e53a27c2-49ab-4dda-ac0b-0145f42b1cca/CleanShot_2025-05-16_at_11.10.10/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;642.96875&quot; height=&quot;381.98143468118195&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380b0b63dc64add8cb862&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23806c8bc7e2854b940d11&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;[공식 문서] Multiple networks 제공 기능 : 중복 IP 환경 시 해결 등 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/ops/deployment/deployment-models/#multiple-networks&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380019bacffbccc5753d4&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://assets.super.so/b27a22c8-1220-4332-8c7b-b84c768ca5d7/images/551f4604-a2f2-4a6b-be96-b788c5046df3/multi-net.svg&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;509.09090909090907&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380bf86b6d40a5df29b4d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Overlapping IP&lt;/span&gt; or VIP ranges for&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;service endpoints&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23801d8bb2fbb496d4a7a9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Crossing of administrative boundaries&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d58075d0b4df4278ea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Fault tolerance&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380528227fb224106653a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Scaling of network addresses&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380049a27cbd8803ae116&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Compliance with standards that require network segmentation&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c2b5e0f2b5413537c8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23807ab271c6de211f89bb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Multi-cluster&lt;/span&gt; 에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Multi-primary&lt;/span&gt; 환경에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east-west gateway 없이&lt;/span&gt;도, 네트워크 장비에 L3 라우팅을 통해서 통신 가능!&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380f9b41be0d893728433&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://www.youtube.com/watch?v=4aeeLGrS514&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c909141a-6e78-4758-8084-8a008501d1c6/image/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c909141a-6e78-4758-8084-8a008501d1c6/image/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c909141a-6e78-4758-8084-8a008501d1c6/image/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;https://www.youtube.com/watch?v=4aeeLGrS514&quot; width=&quot;672&quot; height=&quot;333.2&quot; data-nimg=&quot;1&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23805faa9eda489c46116f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습 코드 참고 : &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/abasitt/kube6/tree/main/istio/istiocon&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/abasitt/kube6/tree/main/istio/istiocon&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380ed9d6ae93e631bba80&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238041ad17e6e42be2cecf&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;12.2.4 클러스터 간 공통 신뢰&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;Common trust&lt;/u&gt;&lt;/span&gt; between clusters - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/ops/deployment/deployment-models/#identity-and-trust-models&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23802c808ecc5b3f9dfeeb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;우리가 해결해야 하는 마지막 요소는 다중 클러스터 서비스 메시 내 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터들이 공통된 신뢰&lt;/span&gt;를 가져야 한다는 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The last factor we need to resolve is that clusters in a multi-cluster service mesh must have &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;common trust.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238078bdcef05ed599bb8d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;공통 신뢰&lt;/span&gt;를 가지면 반대편 클러스터의 워크로드들이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;상호 인증&lt;/span&gt;할 수 있게 된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Having common trust ensures that workloads of opposite clusters can mutually authenticate.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d0b6e0d97e54c8a82a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;반대편 클러스터의 워크로드들 사이에 공통 신뢰를 달성하는 방법에는 두 가지가 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c8973ee3abf9f7eb8f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;첫 번째&lt;/span&gt; 방법은 플러그인 CA 인증서라고 부르는, 공통된 루트 CA가 발급한 사용자 정의 인증서를 사용한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The first uses what we call &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;plug-in CA&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; certificates: userdefined certificates issued from a &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;common root CA.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23803c8774db3b03bad4a6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;두 번째&lt;/span&gt; 방법은 두 클러스터가 인증서를 서명하는 데 사용하는 외부 CA를 통합한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The second integrates an &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;external CA&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; that both clusters use to sign certificates.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238085b3b5c129a7af1ed3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380ba9096d74fb2cb94c3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;플로그인 CA 인증서&lt;/u&gt;&lt;/span&gt; PLUG-IN CA CERTIFICATES - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/tasks/security/cert-management/plugin-ca-cert/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380cc9fa8d514e7ae8bbf&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/8e0806d6-20bd-422e-8bdf-9517be3f80bf/CleanShot_2025-05-16_at_11.22.25/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/8e0806d6-20bd-422e-8bdf-9517be3f80bf/CleanShot_2025-05-16_at_11.22.25/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/8e0806d6-20bd-422e-8bdf-9517be3f80bf/CleanShot_2025-05-16_at_11.22.25/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;같은 루트가 서명한 중간 CA 인증서 사용하기&quot; width=&quot;604.9715576171875&quot; height=&quot;483.97724609375&quot; data-nimg=&quot;1&quot; /&gt;같은 루트가 서명한 중간 CA 인증서 사용하기&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238013a5f9ce4208ca095d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://istio.io/v1.17/docs/tasks/security/cert-management/plugin-ca-cert/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c306eb2c-17cb-4c4d-831e-7118f41913c0/image/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c306eb2c-17cb-4c4d-831e-7118f41913c0/image/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c306eb2c-17cb-4c4d-831e-7118f41913c0/image/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;https://istio.io/v1.17/docs/tasks/security/cert-management/plugin-ca-cert/&quot; width=&quot;624&quot; height=&quot;441.18967052537846&quot; data-nimg=&quot;1&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380bdb24ccfbb82f0bb96&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/a421f7d8-3aec-4b26-8b9f-90989d1b71e7/CleanShot_2025-05-21_at_16.10.09/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/a421f7d8-3aec-4b26-8b9f-90989d1b71e7/CleanShot_2025-05-21_at_16.10.09/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/a421f7d8-3aec-4b26-8b9f-90989d1b71e7/CleanShot_2025-05-21_at_16.10.09/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;604&quot; height=&quot;464&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380aeb9ead570615deb0d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;플러그인 중간 CA 인증서&lt;/span&gt;를 사용하는 것은 쉽다! &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Using plug-in intermediate CA certificates is easy!&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238019a27aca928943e70d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;중간 CA를 이스티오가 만들게 하는 대신에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;사용할 인증서를 지정&lt;/span&gt;하면 된다. 이 인증서는 이스티오가 설치한 네임스페이스에 시크릿으로 제공한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Instead of letting Istio generate an intermediate CA, you specify the certificate to be used by providing it as a secret on the Istio installation namespace.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380eebdb5cfd71773ee81&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;두 클러스터 모두에서 그렇게 함으로써 같은 루트 CA가 서명한 중간 CA를 사용한다. (그림 12.8) &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;You do so for both clusters and use intermediate CAs that were both signed by the common root CA.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380dbb1d0c9b625d6d310&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c6a0dacece482030ef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 방법은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;간단&lt;/span&gt;해서 좋다. 그러나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;중간 CA가 노출&lt;/span&gt;될 경우 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;보안 위험&lt;/span&gt;이 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This method is favorable due to its &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;simplicity&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;; however, it poses a security risk if the intermediate CAs are exposed.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238019b9f1d8808900b484&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;노출을 감지해 중간 CA의 인증서를 취소할 때까지 공격자들은 중간 CA로 신뢰받는 인증서를 서명할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Attackers can use them to sign certificates that are trusted until the exposure is detected and the intermediate CA&amp;rsquo;s certificate is revoked.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380819af5c383224d84df&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 이유로 조직은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;중간 CA를 넘겨주기를(&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;사용하기를&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;) 꺼린다.&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;For this reason, organizations are reluctant to hand over intermediate CAs.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23808cb0dedd4af172eb01&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;노출 위험은 중간 CA를 메모리에만 올리고 etcd(시크릿 같은 쿠버네티스 리소스를 저장하는 저장소)에 쿠버네티스 시크릿으로 유지하지 않음으로써 줄일 수 있다 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rArr; 아래 Secret 내용 참고&lt;/span&gt;&lt;/i&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The exposure risk can be reduced by only loading the intermediate CAs into memory and not persisting them as Kubernetes secrets into etcd (the datastore where Kubernetes resources such as secrets are stored).&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c19cafd3409d194386&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉, kubernetes secret으로 intermediate CA를 저장하는것이 아니라 istiod 자체에 CA를 저장하여 etcd가 노출되어 intermediate CA가 노출되는 일이 없도록 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1fcb8b2c1c23804f84e9d72178fe383f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;더 안전한 대안은 인증서에 서명하는 외부 CA를 통합하는 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;An even safer alternative is to integrate an external CA that signs the certificates.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23805684f5ded1ab8f8c5d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23802f8a5ac3f282164675&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;외부 인증 기관 통합&lt;/u&gt;&lt;/span&gt; EXTERNAL CERTIFICATE AUTHORITY INTEGRATION&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d4ac27f8d4080cd711&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 방법에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt;는 쿠버네티스 CSR 리소스로 저장된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증서 서명 요청&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;CSRs&lt;/span&gt; 을 검증하고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;승인&lt;/span&gt;하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;등록 기관 역할&lt;/span&gt;을 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;istiod acts as a registration authority that validates and approves certificate signing requests (CSRs) stored as Kubernetes CSRs.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380709830c4ab2ccd37eb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;승인된 쿠버네티스 CSR 리소스는 다음 방법 중 하나로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;외부 CA에 제출&lt;/span&gt;된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The Kubernetes CSRs that are approved are submitted to the external CA in one of the following ways:&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380ff9a67f8420f1799a8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;cert-manager&lt;/span&gt; 사용하기 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/cert-manager/cert-manager&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Github&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://cert-manager.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Home&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/tasks/security/cert-management/custom-ca-k8s/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23800da5edd74d1e68671e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/62210cd0-54e3-47c3-9bb4-ba4ab5dead58/CleanShot_2025-05-21_at_16.10.27/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/62210cd0-54e3-47c3-9bb4-ba4ab5dead58/CleanShot_2025-05-21_at_16.10.27/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/62210cd0-54e3-47c3-9bb4-ba4ab5dead58/CleanShot_2025-05-21_at_16.10.27/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;697&quot; height=&quot;386.99999999999994&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c4833bcc27fa7f2076&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;cert-manager 가 우리의 외부 CA를 지원할 때만 가능하다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Using cert-manager - Only viable when our external CA is supported by certmanager.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e58149e6b6fc6ac6ad&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지원하는 외부 발급자 확인 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://cert-manager.io/docs/configuration/issuers/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://cert-manager.io/docs/configuration/issuers/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1fcb8b2c1c23808abe69dad748f5cac8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지원하는 경우, cert-manager 의 istio-csr로 쿠버네티스 CSR을 지켜보고 서명을 위해 외부 CA에 제출할 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380348902f1553272d220&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b6b2f7c17e70b477fd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;맞춤 개발&lt;/span&gt; Custom development
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23800e96acec6c926be851&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;커스텀 CA에 대한 이스티오 문서 참고 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/tasks/security/cert-management/custom-ca-k8s/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.8/docs/tasks/security/cert-management/custom-ca-k8s/#part-2-using-custom-ca&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Old&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d4b152edf849038624&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;승인된 쿠버네티스 CSR을 지켜보고 이를 서명을 위해 외부 CA에 제출하는 쿠버네티스 컨트롤러를 만든다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Create a Kubernetes controller that listens for approved Kubernetes CSRs and submits them to an external CA for signing.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23806ea3d3fdf3d2e8b0ef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 로컬 키가 있는 자체 서명 인증서 대신 외부 CA를 사용하도록 솔루션을 조정해야 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;however, the solution needs to be adapted to use an external CA instead of self-signing certificates with local keys.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380709cdecfbed7c0ba57&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;외부 CA가 인증서를 서명한 후에는 쿠버네티스 CSR에 저장하는데, istiod가 SDS를 사용해 이를 워크로드에 전달한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;After the external CA signs the certificate, it is stored in the Kubernetes CSR, which istiod forwards to the workload using the Secret Discovery Service (SDS).&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23805183f6fa70be23cb04&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b2855cd2a8b68fa6c3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 장에서는 플러그인 CA 인증서를 사용해 클러스터 사이에 공통 신뢰를 설정한다. 그러면 좀 더 간단하고 다중 클러스터 서비스 메시에 초점을 유지하기 때문이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;In this chapter, we set up common trust between clusters using plug-in CA certificates, because it&amp;rsquo;s simpler and maintains focus on multi-cluster service meshes.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23804e8e28e1fb56a8caf1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 다중 클러스터 서비스 메시를 구축하는 데 필요한 조건 모두를 고수준으로 다뤘다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;We have now covered at a high level all the required conditions to set up a multi-cluster service mesh.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380cf9148c48d25620a44&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380108650d61d906a062a&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(참고) &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Secrets&lt;/code&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/docs/concepts/configuration/secret/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/docs/tasks/configmap-secret/managing-secret-using-kubectl/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Task&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/docs/tasks/configmap-secret/managing-secret-using-config-file/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Task2&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/docs/tasks/configmap-secret/managing-secret-using-kustomize/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Task3&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238095bdf0e86ee35b806f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;도전과제1&lt;/code&gt; Istio 에 cert-manager 외부 인증 기간 통합 설정 실습 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://cert-manager.io/docs/usage/istio-csr/installation/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://cert-manager.io/docs/usage/istio-csr/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380ebb13cf59c669c1e9b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;Signature Algorithm: ecdsa-with-SHA256
        Issuer: O=cert-manager, O=cluster.local, CN=istio-ca
        Validity
            Not Before: Jan 13 16:51:59 2022 GMT
            Not After : Jan 13 17:51:59 2022 GMT
...
            X509v3 Subject Alternative Name:
                URI:spiffe://cluster.local/ns/default/sa/httpbin&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380f68472cb2016fcb5a5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1fcb8b2c1c238003ba35cdd5e790b67d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;12.3. 다중 클러스터, 다중 네트워크, 다중 컨트롤 플레인 서비스 메시 개요&lt;/p&gt;
&lt;div id=&quot;block-1fcb8b2c1c23801289e1ebd3e44c7ccd&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;12.3.0.인프라 구성 환경&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380aa8c51d6dc46f4c079&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실세계 엔터프라이즈 서비스를 모방하는 인프라를 준비해보자.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d4a37ae95345ed2150&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 서비스는 여러 클러스터에서 실행되고, 여러 리전에 걸쳐 배포되며, 서로 다른 네트워크에 위치한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d7bf72d4774cfeee9f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;west-cluster&lt;/code&gt; : 사설 네트워크가 us-west 리전에 있는 쿠버네티스 클러스터. 여기서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;webapp&lt;/span&gt; 서비스를 실행.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380ee8d33f6927eb59f5e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;east-cluster&lt;/code&gt; : 사설 네트워크가 us-east 리전에 있는 쿠버네티스 클러스터. 여기서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;catalog&lt;/span&gt; 서비스를 실행할 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238023a398f5b6cbc86bf7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/da13a98d-7316-4968-8d08-fab6bc0cc74c/CleanShot_2025-05-16_at_13.15.57/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/da13a98d-7316-4968-8d08-fab6bc0cc74c/CleanShot_2025-05-16_at_13.15.57/w=828,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/da13a98d-7316-4968-8d08-fab6bc0cc74c/CleanShot_2025-05-16_at_13.15.57/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;다중 클러스터 서비스 메시 다이러그램&quot; width=&quot;816&quot; height=&quot;301.8981233243968&quot; data-nimg=&quot;1&quot; /&gt;다중 클러스터 서비스 메시 다이러그램&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d2a3efd986d0f82bf8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터를 2개의 서로 다른 리전에 두면, 둘 중 하나에 재난이 일어난 경우의 서비스 중단으로부터 우리를 보호할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238031ab61f4ff290c392f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;webapp 과 catalog 워크로드가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;별개의 클러스터에 있어야 하는 기술적인 이유는 없으며&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;단지 시연하려는 것뿐&lt;/span&gt;이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23800eb693c7a8d0fac300&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&amp;lsquo;수다스러운&amp;rsquo; 워크로드는 지연 시간을 줄이기 위해 가능하면 가까이 있어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a5af9cecca33047d3c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238078aa82c803e031285d&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;12.3.1 다중 클러스터 배포 모델 선택하기&lt;/span&gt; Choosing the multi-cluster deployment model&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23800788e2db99b5c4ff46&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다중 네트워크 인프라는 클러스터 사이를 연결할 수 있게 네트워크를 잇는 east-west 게이트웨이를 사용해야 하지만, 복제 컨트롤 플레인 배포 모델을 사용할지, 단일 컨트롤 플레인을 사용할지 여부는 정해져 있지 않다. 결정은 비즈니스 요구 사항에 달려 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;multi-network infrastructur&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;e dictates that we need to use an &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east-west gateway &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;to &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;bridge&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; the networks to achieve&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; cross-cluster&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; connectivity but leaves open the decision whether to use the&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; replicated control-plane&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; deployment model or a &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;single control plane&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;. The decision is driven by the business requirements.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238077b651cab901157e74&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ACME의 경우에는 온라인 상점이 아주 인기가 많으며, 서비스가 중단되는 1분마다 수백만 달러의 비용이 발생한다. 정말 그렇다! 따라서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;고가용성이 최우선&lt;/span&gt; 과제이므로, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인&lt;/span&gt;이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;각 클러스터에 배포&lt;/span&gt;되는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본-기본 배포 모&lt;/span&gt;델을 사용할 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;In ACME&amp;rsquo;s case, its online store is highly popular: every minute of it being down would cost the business millions, for real! Hence high availability is a top priority, and we&amp;rsquo;ll use the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;primary-primary deployment model&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, where the Istio control plane is deployed in each cluster.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380608486c61e6b63fdc8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 모든 것을 종합하면, 우리는 네트워크를 잇는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east-west 게이트웨이&lt;/span&gt;를 사용해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다중 클러스터, 다중 네트워크, 다중 컨트롤 플레인 서비스 메시&lt;/span&gt;를 구축할 것이고,&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;기본-기본 배포 모델&lt;/u&gt;&lt;/span&gt;을 사용할 것이다. 그럼 시작해보자! &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Putting it all together, we&amp;rsquo;ll set up a &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;multi-cluster, multi-network, multi-control-plane service mesh&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; using an &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east-west gateway&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; to bridge the networks and use the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;primary-primary deployment &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;model. Let&amp;rsquo;s get started!&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23801b8729efc3049f451e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;12.3.2 클라우드 인프라 준비하기&lt;/span&gt; Setting up the cloud infrastructure &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습~)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238002a0aad480fc536162&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;(참고) 책은 Azure AKS 클러스터 2대를 배포함.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23809393a5e5c44720f5df&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;[실습 환경 구성] &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;k8s(1.23.17) 배포&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;west&lt;/span&gt;&lt;/span&gt; k8s 클러스터 배포 , &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east&lt;/span&gt;&lt;/span&gt; k8s 클러스터 배포 - (참고)&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/sedflix/multi-cluster-istio-kind/tree/master/kind-setup&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Github&lt;/a&gt; &amp;amp; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;mypc 컨테이너&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c1a988d5c5eb8fcc9f&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1015px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1fcb8b2c1c23809eaa0fc84fe4fad0f4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;실습 과정 중 NodePort 사용하는 Service 에서 중복 될 수 있음. 중복 될 경우 직접 edit 수정 할 것.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238071995fe5afb0ad8846&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;west&lt;/span&gt;&lt;/span&gt; k8s 클러스터 배포&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238093bed4c066e0ef0c08&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;git clone https://github.com/AcornPublishing/istio-in-action
cd istio-in-action/book-source-code-master

# 
kind create cluster --name west --image kindest/node:v1.23.17 --kubeconfig ./west-kubeconfig --config - &amp;lt;&amp;lt;EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000 # istio-ingrssgateway HTTP
    hostPort: 30000
  - containerPort: 30001 # Prometheus
    hostPort: 30001
  - containerPort: 30002 # Grafana
    hostPort: 30002
  - containerPort: 30003 # Kiali
    hostPort: 30003
  - containerPort: 30004 # Tracing
    hostPort: 30004
  - containerPort: 30005 # kube-ops-view
    hostPort: 30005
networking:
  podSubnet: 10.10.0.0/16
  serviceSubnet: 10.100.0.0/24
EOF

# 설치 확인
docker ps
cat west-kubeconfig
kubectl get node --kubeconfig=./west-kubeconfig
kubectl get pod -A --kubeconfig=./west-kubeconfig
    
# 노드에 기본 툴 설치
docker exec -it west-control-plane sh -c 'apt update &amp;amp;&amp;amp; apt install tree psmisc lsof wget bridge-utils net-tools dnsutils tcpdump ngrep iputils-ping git vim -y'

# (옵션) kube-ops-view
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30005 --set env.TZ=&quot;Asia/Seoul&quot; --namespace kube-system --kubeconfig=./west-kubeconfig
kubectl get deploy,pod,svc,ep -n kube-system -l app.kubernetes.io/instance=kube-ops-view --kubeconfig=./west-kubeconfig

## kube-ops-view 접속 URL 확인
open &quot;http://localhost:30005/#scale=1.5&quot;
open &quot;http://localhost:30005/#scale=1.3&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380068f65f6b1b885c7a1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380f5ae0bd6c7ec7bd810&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east&lt;/span&gt;&lt;/span&gt; k8s 클러스터 배포&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238065ab0bfaa7dce7272b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 
kind create cluster --name east --image kindest/node:v1.23.17 --kubeconfig ./east-kubeconfig --config - &amp;lt;&amp;lt;EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 31000 # istio-ingrssgateway HTTP
    hostPort: 31000
  - containerPort: 31001 # Prometheus
    hostPort: 31001
  - containerPort: 31002 # Grafana
    hostPort: 31002
  - containerPort: 31003 # Kiali
    hostPort: 31003
  - containerPort: 31004 # Tracing
    hostPort: 31004
  - containerPort: 31005 # kube-ops-view
    hostPort: 31005
networking:
  podSubnet: 10.20.0.0/16
  serviceSubnet: 10.200.0.0/24
EOF

# 설치 확인
docker ps
cat east-kubeconfig
kubectl get node --kubeconfig=./east-kubeconfig
kubectl get pod -A --kubeconfig=./east-kubeconfig

# 노드에 기본 툴 설치
docker exec -it east-control-plane sh -c 'apt update &amp;amp;&amp;amp; apt install tree psmisc lsof wget bridge-utils net-tools dnsutils tcpdump ngrep iputils-ping git vim -y'

# (옵션) kube-ops-view
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=31005 --set env.TZ=&quot;Asia/Seoul&quot; --namespace kube-system --kubeconfig=./east-kubeconfig
kubectl get deploy,pod,svc,ep -n kube-system -l app.kubernetes.io/instance=kube-ops-view --kubeconfig=./east-kubeconfig

## kube-ops-view 접속 URL 확인
open &quot;http://localhost:31005/#scale=1.5&quot;
open &quot;http://localhost:31005/#scale=1.3&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238064b6c2d6d153923b6f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380a084e3d968288261d1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kind docker network 에 테스트용 PC(실제로는 컨테이너) 배포&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238018adedd70c8e859e53&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# kind 설치 시 kind 이름의 도커 브리지가 생성된다 : 172.18.0.0/16 대역
docker network ls
docker inspect kind

# mypc 컨테이너 기동 : kind 도커 브리지를 사용하고, 컨테이너 IP를 지정 없이 혹은 지정 해서 사용
docker run -d --rm --name mypc --network kind --ip 172.19.0.100 nicolaka/netshoot sleep infinity # IP 지정 실행 시
혹은 IP 지정 실행 시 에러 발생 시 아래 처럼 IP 지정 없이 실행
docker run -d --rm --name mypc --network kind nicolaka/netshoot sleep infinity # IP 지정 없이 실행 시
docker ps

# kind network 중 컨테이너(노드) IP(대역) 확인
docker ps -q | xargs docker inspect --format '{{.Name}} {{.NetworkSettings.Networks.kind.IPAddress}}'
/mypc 172.19.0.100
/east-control-plane 172.19.0.3
/west-control-plane 172.19.0.2

# 동일한 docker network(kind) 내부에서 컨테이너 이름 기반 도메인 통신 가능 확인!
docker exec -it mypc ping -c 1 172.19.0.2
docker exec -it mypc ping -c 1 172.19.0.3
docker exec -it mypc ping -c 1 west-control-plane

docker exec -it mypc ping -c 1 east-control-plane
--- east-control-plane ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.038/0.038/0.038/0.000 ms

#
docker exec -it west-control-plane ping -c 1 east-control-plane
docker exec -it east-control-plane ping -c 1 west-control-plane
--- west-control-plane ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.102/0.102/0.102/0.000 ms

docker exec -it west-control-plane ping -c 1 mypc
docker exec -it east-control-plane ping -c 1 mypc
--- mypc ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.108/0.108/0.108/0.000 ms&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380688a08c201d0cdc829&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c58b38ea8ce5514b48&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;[실습 환경 구성]&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; (편리성 설정) MetalLB 배포 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/metallb/metallb&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Github&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt; &amp;amp; &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Alias 설정(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kwest, keast&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380a6905ec50c5a7906d7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;MetalLB 배포&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238078bc50c1beb79b6212&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# MetalLB 배포
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.9/config/manifests/metallb-native.yaml \
  --kubeconfig=./west-kubeconfig

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.9/config/manifests/metallb-native.yaml \
  --kubeconfig=./east-kubeconfig

# 확인
kubectl get crd --kubeconfig=./west-kubeconfig                  
kubectl get crd --kubeconfig=./east-kubeconfig           
       
kubectl get pod -n metallb-system --kubeconfig=./west-kubeconfig
kubectl get pod -n metallb-system --kubeconfig=./east-kubeconfig


# IPAddressPool, L2Advertisement 설정
cat &amp;lt;&amp;lt; EOF | kubectl apply --kubeconfig=./west-kubeconfig -f -
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default
  namespace: metallb-system
spec:
  addresses:
  - 172.19.255.101-172.19.255.120
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: default
  namespace: metallb-system
spec:
  ipAddressPools:
  - default
EOF

cat &amp;lt;&amp;lt; EOF | kubectl apply --kubeconfig=./east-kubeconfig -f -
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default
  namespace: metallb-system
spec:
  addresses:
  - 172.19.255.201-172.19.255.220
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: default
  namespace: metallb-system
spec:
  ipAddressPools:
  - default
EOF

# 확인
kubectl get IPAddressPool,L2Advertisement -A --kubeconfig=./west-kubeconfig
NAMESPACE        NAME                               AUTO ASSIGN   AVOID BUGGY IPS   ADDRESSES
metallb-system   ipaddresspool.metallb.io/default   true          false             [&quot;172.19.255.101-172.19.255.120&quot;]

NAMESPACE        NAME                                 IPADDRESSPOOLS   IPADDRESSPOOL SELECTORS   INTERFACES
metallb-system   l2advertisement.metallb.io/default   [&quot;default&quot;]                                
gylee@GYLEEui-Macmini week7 % kubectl get IPAddressPool,L2Advertisement -A --kubeconfig=./east-kubeconfig

kubectl get IPAddressPool,L2Advertisement -A --kubeconfig=./east-kubeconfig
NAMESPACE        NAME                               AUTO ASSIGN   AVOID BUGGY IPS   ADDRESSES
metallb-system   ipaddresspool.metallb.io/default   true          false             [&quot;172.19.255.201-172.19.255.220&quot;]

NAMESPACE        NAME                                 IPADDRESSPOOLS   IPADDRESSPOOL SELECTORS   INTERFACES
metallb-system   l2advertisement.metallb.io/default   [&quot;default&quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c0a0edf98d104c9ab4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380148137c653f4efe799&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;샘플 애플리케이션 배포 후 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380639cf2eab35c2fbee6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
cat &amp;lt;&amp;lt; EOF | kubectl apply --kubeconfig=./west-kubeconfig -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
  type: LoadBalancer
EOF

#
cat &amp;lt;&amp;lt; EOF | kubectl apply --kubeconfig=./east-kubeconfig -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
  type: LoadBalancer
EOF

# 확인
kubectl get deploy,pod,svc,ep --kubeconfig=./west-kubeconfig
kubectl get deploy,pod,svc,ep --kubeconfig=./east-kubeconfig

kubectl get svc nginx-service --kubeconfig=./west-kubeconfig -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
kubectl get svc nginx-service --kubeconfig=./east-kubeconfig -o jsonpath='{.status.loadBalancer.ingress[0].ip}'

WNIP=$(kubectl get svc nginx-service --kubeconfig=./west-kubeconfig -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
ENIP=$(kubectl get svc nginx-service --kubeconfig=./east-kubeconfig -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

# 외부(mypc)에서 각 클러스터의 Service(LB)로 접속(인입) 확인 : TCP 80 포트 사용으로 편리하다!
docker exec -it mypc curl -s $WNIP
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Welcome to nginx!&amp;lt;/title&amp;gt;
...

docker exec -it mypc curl -s $WNIP -v -I

docker exec -it mypc curl -s $ENIP
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Welcome to nginx!&amp;lt;/title&amp;gt;
...

docker exec -it mypc curl -s $ENIP -v -I


# 확인 후 삭제
kubectl delete deploy,svc --all --kubeconfig=./west-kubeconfig
kubectl delete deploy,svc --all --kubeconfig=./east-kubeconfig
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380bb9eb3cb575207f739&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23804ab849d036ac86148b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;alias 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380afa659cdc903eb9863&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
alias kwest='kubectl --kubeconfig=./west-kubeconfig'
alias keast='kubectl --kubeconfig=./east-kubeconfig'

# 확인
kwest get node
keast get node
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23800eb246e315cb9fea42&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380439133f50659444532&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자주 사용하는 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Alias&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238020af68c2efcea5afac&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vhdl&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;alias kwest='kubectl --kubeconfig=./west-kubeconfig'
alias keast='kubectl --kubeconfig=./east-kubeconfig'

alias iwest='docker exec -it west-control-plane istioctl'
alias ieast='docker exec -it east-control-plane istioctl'&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23807f868af88a8e6000a8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380eeabd6d14b933dffa6&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;12.3.3 플러그인 CA 인증서 설정하기*&lt;/span&gt;&lt;/span&gt; Configuring plug-in CA certificates&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23806bac26f0265f199103&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;9장에서 워크로드 ID를 부트스트래핑(워크로드가 자신의 정체를 입증하는 서명된 인증서를 받는 방법)을 다룰 때는 설치할 때 인증서에 서명할 CA를 생성한다는 사실을 생략했다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;In chapter 9, when we covered bootstrapping of workload identity&amp;mdash;which is how workloads get a signed certificate that proves their identity&amp;mdash;for simplicity we omitted the fact that Istio generates a CA to sign the certificates upon installation. &lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23802ca622c4243000e38d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이렇게 만들어진 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CA&lt;/span&gt;는 이스티오를 설치한 네임스페이스에&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; istio-ca-secret&lt;/span&gt; 이라는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;시크릿&lt;/span&gt;으로 저장되고, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod 복제본&lt;/span&gt;들에게 공유된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This generated CA is stored as a secret named istio-ca-secret in the Istio installation namespace and is shared with istiod replicas.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c8b8e6c281a88552a2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 기본 동작은 우리의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자체 CA를 사용하도록 변경&lt;/span&gt;할 수 있는데, 그러면 이스티오 CA가 CA를 새로 만드는 대신 이 CA 를 사용하게 된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The default behavior can be overridden by plugging in our CA, which the Istio CA picks up instead of generating a new one. &lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380959471d84b36110fbe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇게 하려면 CA 인증서를 이스티오를 설치한 네임스페이스인 istio-system 에 cacerts 라는 시크릿으로 저장해야 하며, 다음과 같은 데이터를 포함해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238003b64cf1b8e997077a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/8e0806d6-20bd-422e-8bdf-9517be3f80bf/CleanShot_2025-05-16_at_11.22.25/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/8e0806d6-20bd-422e-8bdf-9517be3f80bf/CleanShot_2025-05-16_at_11.22.25/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/8e0806d6-20bd-422e-8bdf-9517be3f80bf/CleanShot_2025-05-16_at_11.22.25/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;같은 루트가 서명한 중간 CA 인증서 사용하기&quot; width=&quot;604.9715576171875&quot; height=&quot;483.97724609375&quot; data-nimg=&quot;1&quot; /&gt;같은 루트가 서명한 중간 CA 인증서 사용하기&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380029521efd49fda64e7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ca.cert.pem : 중간 CA의 인증서 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The intermediate CA&amp;rsquo;s certificate.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23808b997cc5f96b4cbf3c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ca-key.pem : 중간 CA의 개인 키 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The intermediate CA&amp;rsquo;s private key.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380dfa4bed6ab69078371&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;root-cert.pem : 중간 CA를 발급한 루트 CA의 인증서. 루트 CA는 중간 CA들의 인증서를 검증하며, 이것이 클러스터 간 상호 신뢰의 핵심이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The root CA&amp;rsquo;s certificate that issued the intermediate CA. The root CA validates the certificates issued by any of its intermediate CAs, which is key for mutual trust across clusters.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238032b2cae096f7f9c20e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;cert-chain.pem : 중간 CA의 인증서와 루트 인증서를 이어 붙인 신뢰 체인 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The concatenation of the intermediate CA&amp;rsquo;s certificate and the root CA certificate that forms the trust chain.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238040b687de472cce30a7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(참고) 인증서 구조&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238005abeff7fa5b7c4cdb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;루트 CA&lt;/span&gt;: 모든 클러스터가 신뢰하는 최상위 인증서.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238021b354fa0bd854d6ef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;중간 CA&lt;/span&gt;: 각 클러스터별로 발급되어 워크로드 인증서 서명에 사용.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23804e893dd5a88f21c8b0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증서 체인 &lt;/span&gt;: 신뢰 체인을 구성하여 클라이언트가 인증서를 검증할 수 있도록 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c098b9d196be3c9c8a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380b0bfe5cc9545429bfb&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(참고) SSL과 인증서 구조 이해하기 : 인증서 계층 구조 설명 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://blog.naver.com/alice_k106/221468341565&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380ddb2b2e2c4e30c66d0&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/8c582101-3cb8-42f9-be33-69a431a50aeb/CleanShot_2025-05-16_at_16.21.17/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/8c582101-3cb8-42f9-be33-69a431a50aeb/CleanShot_2025-05-16_at_16.21.17/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/8c582101-3cb8-42f9-be33-69a431a50aeb/CleanShot_2025-05-16_at_16.21.17/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;cacerts 시크릿은 루트 CA의 공개 키와 중간 CA의 공개 키 및 비밀 키로 구성된다. 루트 CA의 비밀 키는 클러스터 외부에 안전하게 저장된다.&quot; width=&quot;864&quot; height=&quot;332.4816753926701&quot; data-nimg=&quot;1&quot; /&gt;cacerts 시크릿은 루트 CA의 공개 키와 중간 CA의 공개 키 및 비밀 키로 구성된다. 루트 CA의 비밀 키는 클러스터 외부에 안전하게 저장된다.&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23809f908bc8ec3d26f69a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380848ecee0c8e4be551b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;저자가 제공하는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;./ch12/scripts/generate-certificates.sh&lt;/code&gt; 스크립트를 사용하면 중간 CA와 루트 CA는 .&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/ch12/certs&lt;/code&gt; 디렉터리에 만들어진다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c59c90ffc7f04a07a2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 스크립트는 루트 CA를 만들고, 이 CA를 사용해 중간 CA 2개에 서명한다. 그 결과 신뢰가 같은 중간 CA가 만들어진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380e9a944df93fc4f9aa9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380baad7be6ba2ffb3372&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;플러그인 CA 인증서 적용하기&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; APPLYING PLUG-IN CA CERTIFICATES&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c238087bacec835d292939e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;./ch12/scripts/generate-certificates.sh&lt;/code&gt; 스크립트 : Smallstep - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/smallstep/cli&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Github&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://smallstep.com/docs/step-cli/installation/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Install&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380308542f99d0b142505&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;stata&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cat ./ch12/scripts/generate-certificates.sh
#!/bin/bash

set -ex

cert_dir=`dirname &quot;$BASH_SOURCE&quot;`/../certs

echo &quot;Clean up contents of dir './chapter12/certs'&quot;
rm -rf ${cert_dir}

echo &quot;Generating new certificates&quot;
mkdir -p ${cert_dir}/west-cluster
mkdir -p ${cert_dir}/east-cluster

# step CLI 설치 확인 : step CLI가 설치되어 있지 않으면 에러 출력 후 종료.
## macOS : brew install step
if ! [ -x &quot;$(command -v step)&quot; ]; then 
  echo 'Error: Install the smallstep cli (https://github.com/smallstep/cli)'
  exit 1
fi

step certificate create root.istio.in.action ${cert_dir}/root-cert.pem ${cert_dir}/root-ca.key \
  --profile root-ca --no-password --insecure --san root.istio.in.action \
  --not-after 87600h --kty RSA 

step certificate create west.intermediate.istio.in.action ${cert_dir}/west-cluster/ca-cert.pem ${cert_dir}/west-cluster/ca-key.pem --ca ${cert_dir}/root-cert.pem --ca-key ${cert_dir}/root-ca.key --profile intermediate-ca --not-after 87600h --no-password --insecure --san west.intermediate.istio.in.action --kty RSA 
step certificate create east.intermediate.istio.in.action ${cert_dir}/east-cluster/ca-cert.pem ${cert_dir}/east-cluster/ca-key.pem --ca ${cert_dir}/root-cert.pem --ca-key ${cert_dir}/root-ca.key --profile intermediate-ca --not-after 87600h --no-password --insecure --san east.intermediate.istio.in.action --kty RSA 

cat ${cert_dir}/west-cluster/ca-cert.pem ${cert_dir}/root-cert.pem &amp;gt; ${cert_dir}/west-cluster/cert-chain.pem
cat ${cert_dir}/east-cluster/ca-cert.pem ${cert_dir}/root-cert.pem &amp;gt; ${cert_dir}/east-cluster/cert-chain.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23803babf9c7771fb404d5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238056b855fa9833f90bef&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;기본 정보 확인&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c23803cbba3dbc8a8fc70ec&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
tree ch12/certs 
ch12/certs
├── east-cluster
│   ├── ca-cert.pem    # 중간 CA 인증서
│   ├── ca-key.pem     # 중간 CA 개인zl
│   └── cert-chain.pem # 인증서 체인
├── root-ca.key        # 루트 인증서
├── root-cert.pem      # 루트 개인키
└── west-cluster
    ├── ca-cert.pem
    ├── ca-key.pem
    └── cert-chain.pem

# (참고) 인증서 체인 생성
## 중간 CA 인증서(ca-cert.pem)와 루트 CA 인증서(root-cert.pem)를 결합 -&amp;gt; 결과는 {west/east}-cluster/cert-chain.pem 에 저장
cat ${cert_dir}/west-cluster/ca-cert.pem ${cert_dir}/root-cert.pem &amp;gt; ${cert_dir}/west-cluster/cert-chain.pem
cat ${cert_dir}/east-cluster/ca-cert.pem ${cert_dir}/root-cert.pem &amp;gt; ${cert_dir}/east-cluster/cert-chain.pem


# 인증서 계층 구조
root.istio.in.action (Root CA)
   │
   └── east.intermediate.istio.in.action (Intermediate CA)


# 루트 CA 인증서 확인
openssl x509 -in ch12/certs/root-cert.pem -noout -text
...
        Issuer: CN=root.istio.in.action
        Validity
            Not Before: Jun 28 14:11:35 2022 GMT
            Not After : Jun 25 14:11:35 2032 GMT
        Subject: CN=root.istio.in.action
        ...
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:1
...

#
openssl x509 -in ch12/certs/east-cluster/ca-cert.pem -noout -text
...
        Issuer: CN=root.istio.in.action
        Validity
            Not Before: Jun 28 14:11:35 2022 GMT
            Not After : Jun 25 14:11:35 2032 GMT
        Subject: CN=east.intermediate.istio.in.action
        ...
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:0 # 이 중간 CA는 추가적인 하위 CA를 만들 수 없음
...

openssl x509 -in ch12/certs/east-cluster/cert-chain.pem -noout -text
        Issuer: CN=root.istio.in.action
        Validity
            Not Before: Jun 28 14:11:35 2022 GMT
            Not After : Jun 25 14:11:35 2032 GMT
        Subject: CN=east.intermediate.istio.in.action
        ...
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:0

#
openssl x509 -in ch12/certs/west-cluster/ca-cert.pem -noout -text
openssl x509 -in ch12/certs/west-cluster/cert-chain.pem -noout -text
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a0b865d39cf1500a2f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238069a533cc7080dad2e6&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;(옵션) step 로 인증서 생성 시&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380dbbb93d0c060822a85&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vala&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# step CLI 설치
# macOS : brew install step

# 스크립트 실행
./ch12/scripts/generate-certificates.sh
...

# 생성 결과 확인
tree ch12/certs 
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238051992fce38fa2f9aeb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380f2a952c39c752414aa&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio-system 네임스페이스를 만든 후 인증서를 cacerts 라는 시크릿으로 배포하여 각 클러스터에 중간 CA를 만들어두기&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c238047be5dceee2184f32a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# west-cluster 용 인증서 설정하기
kwest create namespace istio-system
kwest create secret generic cacerts -n istio-system \
--from-file=ch12/certs/west-cluster/ca-cert.pem \
--from-file=ch12/certs/west-cluster/ca-key.pem \
--from-file=ch12/certs/root-cert.pem \
--from-file=ch12/certs/west-cluster/cert-chain.pem

# east-cluster 용 인증서 설정하기
keast create namespace istio-system
keast create secret generic cacerts -n istio-system \
--from-file=ch12/certs/east-cluster/ca-cert.pem \
--from-file=ch12/certs/east-cluster/ca-key.pem \
--from-file=ch12/certs/root-cert.pem \
--from-file=ch12/certs/east-cluster/cert-chain.pem

# 확인
for i in west east; do echo &quot;&amp;gt;&amp;gt; k8s cluster : $i &amp;lt;&amp;lt;&quot;; kubectl get ns istio-system --kubeconfig=./$i-kubeconfig; echo; done
&amp;gt;&amp;gt; k8s cluster : west &amp;lt;&amp;lt;
NAME           STATUS   AGE
istio-system   Active   3m56s

&amp;gt;&amp;gt; k8s cluster : east &amp;lt;&amp;lt;
NAME           STATUS   AGE
istio-system   Active   21s

for i in west east; do echo &quot;&amp;gt;&amp;gt; k8s cluster : $i &amp;lt;&amp;lt;&quot;; kubectl get secret cacerts  -n istio-system --kubeconfig=./$i-kubeconfig; echo; done
&amp;gt;&amp;gt; k8s cluster : west &amp;lt;&amp;lt;
NAME      TYPE     DATA   AGE
cacerts   Opaque   4      71s

&amp;gt;&amp;gt; k8s cluster : east &amp;lt;&amp;lt;
NAME      TYPE     DATA   AGE
cacerts   Opaque   4      32s

for i in west east; do echo &quot;&amp;gt;&amp;gt; k8s cluster : $i &amp;lt;&amp;lt;&quot;; kubectl view-secret cacerts -n istio-system --all --kubeconfig=./$i-kubeconfig; echo; done
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e9899bec9526b47e08&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;플러그인 인증서가 설정되면 이스티오 컨트롤 플레인을 설치할 수 있다. 컨트롤 플레인은 플러그인 CA 인증서(사용자가 정의한 중간 인증서)를 갖고 워크로드 인증서에 서명한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;With the plug-in certificates configured, we can install the Istio control plane, which picks up the plug-in CA certificates (the user-defined intermediate certificates) to sign workload certificates.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380bfa28df239c330c9cd&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380d5884eddd82d9dd803&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;12.3.4 각 클러스터에 (Istiod) 컨트롤 플레인 설치하기*&lt;/span&gt;&lt;/span&gt; Installing the control planes in each cluster&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c238097b80af1363c02d028&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380269523e8916c9f68e3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 컨트롤 플레인을 설치하기에 앞서, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;각 클러스터&lt;/span&gt;에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네트워크 메타데이터&lt;/span&gt;를 더하자. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;network metadata for each cluster&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23806298a5e77bedea831a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네트워크 메타데이터를 통해 이스티오는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;토폴로지 정보&lt;/span&gt;를 사용할 수 있고, 그 정보에 기반해 워크로드를 설정할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Network metadata enables Istio to utilize the topology information and configure workloads based on it.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238069be6dd49e7006da5d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서 워크로드는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;지역 정보를&lt;/span&gt; 사용해 트래픽을 라우팅할 때 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;가까운 워크로드&lt;/span&gt;를 우선할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Thus workloads can use &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;locality&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; information and &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;prioritize&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;routing&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; traffic to workloads in close proximity.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d69227c7c5de516c40&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 네트워크 토폴로지를 이해할 때 얻는 또 다른 이점은 워크로드가 다른 네트워크에 있는 원격 클러스터의 워크로드로 트래픽을 라우팅할 때 east-west 게이트웨이를 사용하도록 설정한다는 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Another benefit when Istio understands the network topology is that it configures workloads to use east-west gateways when routing traffic to workloads in remote clusters that are in different networks.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23802aad87eaad27c3df90&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a784f9eddda03f1fb8&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;클러스터 간 연결을 위해 네트워크에 레이블 붙이기&lt;/u&gt;&lt;/span&gt; LABELING NETWORKS FOR CROSS-CLUSTER CONNECTIVITY&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23801cadd0fccdea03f81c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네트워크 토롤로&lt;/span&gt;지는 이스티오를 설치할 때 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;MeshNetwork&lt;/span&gt; 설정을 사용해 설정할 수 있다 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/reference/config/istio.mesh.v1alpha1/#MeshNetworks&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380bea2a8f1eb9b614bb7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 이것은 드문 고급 사용 사례에서나 유지하는 레거시 설정이며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;더 간단한 방법&lt;/span&gt;은 이스티오를 설치한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네임스페이스에 네트워크 토폴로지 정보&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;레이블로 붙이는 것&lt;/span&gt;이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23807d8185c571defc3c2f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;우리의 경우 이스티오를 설치한 네임스페이스는 istio-system 이고, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;west-cluster &lt;/span&gt;의 네트워크는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;west-network&lt;/span&gt; 이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e78fa4e54acff4e628&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러므로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;west-cluster&lt;/span&gt; 의&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; istio-system&lt;/span&gt; 에 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;topology.istio.io/network=&lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;west-network&lt;/span&gt;&lt;/code&gt; 레이블을 붙인다. east 도 설정하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23800f9ffaf19162b00292&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kwest label namespace istio-system topology.istio.io/network=west-network
keast label namespace istio-system topology.istio.io/network=east-network

# 확인
for i in west east; do echo &quot;&amp;gt;&amp;gt; k8s cluster : $i &amp;lt;&amp;lt;&quot;; kubectl get ns istio-system --show-labels --kubeconfig=./$i-kubeconfig; echo; done
&amp;gt;&amp;gt; k8s cluster : west &amp;lt;&amp;lt;
NAME           STATUS   AGE   LABELS
istio-system   Active   13m   kubernetes.io/metadata.name=istio-system,topology.istio.io/network=west-network

&amp;gt;&amp;gt; k8s cluster : east &amp;lt;&amp;lt;
NAME           STATUS   AGE     LABELS
istio-system   Active   9m37s   kubernetes.io/metadata.name=istio-system,topology.istio.io/network=east-network&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23800cb9ece34d3bd249d8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 레이블들을 사용해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오는 네트워크 토폴로지를 이해&lt;/span&gt;하고, 그 이해를 바탕으로 워크로드 설정법을 결정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380898154fdd3d95a6dc1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380968fe8cfba73a5735d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;IstioOperator 리소스를 사용해 컨트롤 플레인 설치하기*&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; INSTALLING THE CONTROL PLANES USING ISTIOOPERATOR RESOURCES &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; Alias 설정(i&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;west, ieast&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a5bbfaf30dbb7cd945&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;많이 수정해야 하므로, IstioOperator 리소스를 사용해 west-cluster 의 이스티오 설치를 정의하자.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23803bab48d07fa2775573&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;west-cluster 를 성공적으로 설치&lt;/span&gt;한 후, east-cluster 에 복제한 컨트롤 플레인을 설치할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380cd9c73db13ee939676&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;east-cluster 용 IstioOperator&lt;/span&gt; 정의는 west-cluster 용과 비교했을 때 클러스터 이름과 네트워크만 다르다.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c1a93ae03efa6993c5&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;istioctl alias 설정 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(i&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;west, ieast&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt; 및 미리 만들어둔 인증서 적용 확인&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23807fad85cc2c215ec439&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;두 클러스터 모두에 컨트롤 플레인을 설치하면 개별 메시 2개를 갖게 되는데, 각자 로컬 서비스만 찾는 istiod 복제복 하나와 수신 트래픽용 게이트웨이 하나를 실행한다. (그림 12.11 참조)&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380358c7fd5e3248ee615&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/4d8a5c9c-9d4b-487b-ae8b-ff1c52b6f947/CleanShot_2025-05-16_at_18.15.54/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/4d8a5c9c-9d4b-487b-ae8b-ff1c52b6f947/CleanShot_2025-05-16_at_18.15.54/w=828,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/4d8a5c9c-9d4b-487b-ae8b-ff1c52b6f947/CleanShot_2025-05-16_at_18.15.54/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;메시의 현재 설정&quot; width=&quot;768&quot; height=&quot;518.7546174142481&quot; data-nimg=&quot;1&quot; /&gt;메시의 현재 설정&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23807ea979eb99b6e6c0b2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메시에는 다음 절에서 설정할 클러스터 간 워크로드 디스커버리 및 연결이 없다. 그러나 더 진행하기 전에 각 클러스터에 일부 워크로드를 실행해보자.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238059ac0dedd8dbf0b0f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 워크로드는 클러스터 간 디스커버리와 연결성이 올바르게 준비됐는지 확인하는 데 유용할 것이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23804aac3fccba8d2d4638&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238066829be9b3797dbc6c&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;두 클러스터 모두에 워크로드 실행하기&lt;/u&gt;&lt;/span&gt; Running workloads on both clusters&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238052b936db2cfbad26a3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인을 설치했으니 몇 가지 워크로드를 실행해보자.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238031a850e91c048b11a4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;west&lt;/span&gt;-cluster 에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;webapp&lt;/span&gt; 을 배포한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380b7877fc918214728bf&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kwest create ns istioinaction
kwest label namespace istioinaction istio-injection=enabled
kwest -n istioinaction apply -f ch12/webapp-deployment-svc.yaml
kwest -n istioinaction apply -f ch12/webapp-gw-vs.yaml
kwest -n istioinaction apply -f ch12/catalog-svc.yaml # Stub catalog service to which webapp makes request

# Stub service는 west의 weapp에서 east에 있는 catalog에 request하기 위해 만들어지는 빈 service이다.
# 해당 service에 연결된 ep는 존재하지 않는다. -&amp;gt; stub service 방식은 1.7 버전이하에서 사용하며, 이후 버전에서는 사용되지 않는 
cat ch12/catalog-svc.yaml
piVersion: v1
kind: Service
metadata:
  labels:
    app: catalog
  name: catalog
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 3000
  selector:
    app: catalog


# 확인
kwest get deploy,pod,svc,ep -n istioinaction
kwest get svc,ep catalog -n istioinaction
NAME              TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/catalog   ClusterIP   10.100.0.87   &amp;lt;none&amp;gt;        80/TCP    2m36s

NAME                ENDPOINTS   AGE
endpoints/catalog   &amp;lt;none&amp;gt;      2m36s

kwest get gw,vs,dr -A
NAMESPACE       NAME                                            AGE
istioinaction   gateway.networking.istio.io/coolstore-gateway   2m47s

NAMESPACE       NAME                                                       GATEWAYS                HOSTS                         AGE
istioinaction   virtualservice.networking.istio.io/webapp-virtualservice   [&quot;coolstore-gateway&quot;]   [&quot;webapp.istioinaction.io&quot;]   2m47s

#
iwest proxy-status
NAME                                                   CLUSTER          CDS        LDS        EDS        RDS        ECDS         ISTIOD                      VERSION
istio-ingressgateway-5db74c978c-n5zbr.istio-system     west-cluster     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-5585445f4c-bs5hk     1.17.8
webapp-5c8b4fff64-2hbwf.istioinaction                  west-cluster     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-5585445f4c-bs5hk     1.17.8

# endpoint 에 IP 는 10.10.0.0/16 대역들 다수 확인
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; k8s cluster : west - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it west-control-plane istioctl proxy-config $i deploy/istio-ingressgateway.istio-system; echo; done
iwest proxy-config cluster deploy/istio-ingressgateway.istio-system | grep catalog
catalog.istioinaction.svc.cluster.local                      80        -          outbound      EDS 

# 현재 cluster간 discovery가 되지 않으므로 endpoint 정보가 출력되지 않는다. 이후 discovery를 활성화 하면 west cluster에서 endpoint 정보 확인 가능
iwest proxy-config endpoint deploy/istio-ingressgateway.istio-system | grep catalog
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238003a9bddd52274899b1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;그런데 east-cluster 에서만 실행하려고 하는 catalog 워크로드용 서비스(Stub Service)가 필요한 이유는 무엇일까?&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23803e8fbefd56d2831147&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 서비스가 없으면 webapp 컨테이너가 FQDN을 IP 주소로 해석할 수 없고, 따라서 트래픽이 애플리케이션을 떠나 프록시로 리다이렉트되는 지점에 도달하기도 전에 요청이 실패하기 때문이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The reason for adding this&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; stub service&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; is that in its absence, the webapp container cannot &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;resolve&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; the fully qualified domain name (&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FQDN&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;) to any IP address, and thus the request would fail prior to reaching the point where traffic leaves the application and is redirected to the proxy.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b9a908fd5461bb1b22&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스텁 catalog 서비스&lt;/span&gt;를 추가함으로써, FQDN은 서비스 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 IP로 해석&lt;/span&gt;되고, 애플리케이션이 트래픽을 시작해 실제 엔보이 설정을 갖고 클러스터 사이의 라우팅을 처리하는 엔보이 프록시로 리다이렉트될 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;By adding a stub catalog service, the FQDN is resolved to the service cluster IP and traffic is initiated by the application, which makes it possible for it to be redirected to the Envoy proxy where the actual Envoy configuration exists and handles the cross-cluster routing.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380ce99b0c4c8348df24a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 이스티오 커뮤니티가 향후 버전에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DNS 프록시&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;개선&lt;/span&gt;할 때 해결할 예정인 에지 케이스로, 다음 장에서 살펴볼 주제다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This is an edge case that the Istio community plans to fix in upcoming versions when the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DNS proxy is enhanced further&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, which is a topic we will examine in the next chapter.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380ab88cadbf9f074e146&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/2ebc176a-923a-4b8d-bb33-919ebb29c7f9/CleanShot_2025-05-16_at_22.06.23/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/2ebc176a-923a-4b8d-bb33-919ebb29c7f9/CleanShot_2025-05-16_at_22.06.23/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/2ebc176a-923a-4b8d-bb33-919ebb29c7f9/CleanShot_2025-05-16_at_22.06.23/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;406.364312267658&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380eab670f2c7cb116992&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380cb8011c401ae5bf228&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east&lt;/span&gt;-cluster 에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;catalog&lt;/span&gt; 서비스를 배포하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a79c97d1e42d08c078&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
keast create ns istioinaction
keast label namespace istioinaction istio-injection=enabled
keast -n istioinaction apply -f ch12/catalog.yaml
cat ch12/catalog.yaml


# 확인
keast get deploy,pod,svc,ep -n istioinaction
keast get svc,ep catalog -n istioinaction
keast get gw,vs,dr -A # 없음, gw,vs,dr은 모두 west cluster에서 설정됨

#
ieast proxy-status
NAME                                                   CLUSTER          CDS        LDS        EDS        RDS          ECDS         ISTIOD                     VERSION
catalog-6cf4b97d-68vr7.istioinaction                   east-cluster     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-85976468f-gxcqn     1.17.8
istio-ingressgateway-7f6f8f8d99-c259g.istio-system     east-cluster     SYNCED     SYNCED     SYNCED     NOT SENT     NOT SENT     istiod-85976468f-gxcqn     1.17.8

# endpoint 에 IP 는 10.20.0.0/16 대역들 다수 확인
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; k8s cluster : east - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it east-control-plane istioctl proxy-config $i deploy/istio-ingressgateway.istio-system; echo; done

ieast proxy-config cluster deploy/istio-ingressgateway.istio-system | grep catalog
catalog.istioinaction.svc.cluster.local                      80        -          outbound      EDS

# east cluster에 생성된 pod의 정도(endpoint 정보)
ieast proxy-config endpoint deploy/istio-ingressgateway.istio-system | grep catalog
10.20.0.14:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23807892d5d8960772c386&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23800d987cd2573276b074&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 2개를 각자 연결해야 하는 워크로드가 있는 지금을 시작점이라고 해보자. 그러나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 간 워크로드 디스커버리&lt;/span&gt; 없이는 사이드카 프록시에 반대 클러스터의 워크로드가 설정되지 않는다. 그러므로 다음 단계는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 간 디스커버리를 활성화&lt;/span&gt;해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23809a936bf4275cc84adf&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23808594d3e573b67ff509&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;12.3.5 클러스터 간 워크로드 디스커버리 활성화하기&lt;/u&gt;&lt;/span&gt; Enabling cross-cluster workload discovery&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c23809e9492d6dcc893924c&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23804297eff2c7ce0d9ef5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;원격 클러스터 접근용 시크릿 만들기&lt;/u&gt;&lt;/span&gt; CREATING THE SECRETS FOR REMOTE CLUSTER ACCESS&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238066950ee47c3bd7a6d2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;istioctl&lt;/code&gt; 에는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;create-remote-secret&lt;/code&gt; 명령어가 있는데, 기본 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;istio-reader-service-account&lt;/code&gt; 서비스 어카운트를 사용해 원격 클러스터 접근용으로 시크릿을 만드는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d5833fd236c48fce2c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;시크릿을 만들 때는 이스티오를 설치할 때 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IstioOperator&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 에서 사용한 클러스터 이름을 지정&lt;/span&gt;하는 것이 중요하다 (east-cluster 및 west-cluster 값은 앞서 &amp;lsquo;IstioOperator 리소스를 사용해 컨트롤 플레인 설치하기&amp;rsquo; 절 참조).&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380489c45f39a5eceba08&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;원격 클러스터에 접근하기 위한 설정의 식별자로 클러스터 이름이 어떻게 사용되는지에는 주의를 기울이자*&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380ceb40beb3781178747&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;sql&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
for i in west east; do echo &quot;&amp;gt;&amp;gt; k8s cluster : $i &amp;lt;&amp;lt;&quot;; kubectl get sa -n istio-system --kubeconfig=./$i-kubeconfig; echo; done

# east
keast describe sa -n istio-system istio-reader-service-account      
...
Mountable secrets:   istio-reader-service-account-token-jlqcc
Tokens:              istio-reader-service-account-token-jlqcc

keast get sa -n istio-system istio-reader-service-account -o yaml
...
  name: istio-reader-service-account
  namespace: istio-system
  resourceVersion: &quot;10391&quot;
  uid: 37688420-7381-454b-96b3-8c2c72275ead
secrets:
- name: istio-reader-service-account-token-jlqc

keast get sa -n istio-system istio-reader-service-account -o jsonpath='{.secrets[0].name}'
eirsa=$(keast get sa -n istio-system istio-reader-service-account -o jsonpath='{.secrets[0].name}')
keast get secret -n istio-system $eirsa
keast get secret -n istio-system $eirsa -o json
{
    &quot;apiVersion&quot;: &quot;v1&quot;,
    &quot;data&quot;: {
        &quot;ca.crt&quot;: &quot;LS0t,,,==&quot;,
        &quot;namespace&quot;: &quot;aXN0aW8tc3lzdGVt&quot;, # istio-system
        &quot;token&quot;: &quot;ZXl...VN2Zw==&quot;
    },
...

kubectl rolesum istio-reader-service-account -n istio-system --kubeconfig=./east-kubeconfig
...
Policies:

&amp;bull; [CRB] */istio-reader-clusterrole-istio-system ⟶  [CR] */istio-reader-clusterrole-istio-system
  Resource                                                                                         Name  Exclude  Verbs  G L W C U P D DC  
  *.[config.istio.io,security.istio.io,networking.istio.io,authentication.istio.io,rbac.istio.io]  [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
  customresourcedefinitions.apiextensions.k8s.io                                                   [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
  endpoints                                                                                        [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
  endpointslices.discovery.k8s.io                                                                  [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
  namespaces                                                                                       [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
  nodes                                                                                            [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
  pods                                                                                             [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
  replicasets.apps                                                                                 [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
  replicationcontrollers                                                                           [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
  secrets                                                                                          [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
  serviceexports.multicluster.x-k8s.io                                                             [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✖ ✖ ✔ ✖   
  serviceimports.multicluster.x-k8s.io                                                             [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
  services                                                                                         [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
  subjectaccessreviews.authorization.k8s.io                                                        [*]     [-]     [-]   ✖ ✖ ✖ ✔ ✖ ✖ ✖ ✖   
  tokenreviews.authentication.k8s.io                                                               [*]     [-]     [-]   ✖ ✖ ✖ ✔ ✖ ✖ ✖ ✖   
  workloadentries.networking.istio.io                                                              [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   


&amp;bull; [CRB] */istio-reader-istio-system ⟶  [CR] */istio-reader-istio-system
  Resource                                                                                         Name  Exclude  Verbs  G L W C U P D DC  
  *.[config.istio.io,security.istio.io,networking.istio.io,authentication.istio.io,rbac.istio.io]  [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
...

keast auth can-i --list
keast auth can-i --as=system:serviceaccount:istio-system:istio-reader-service-account --list
Resources                                        Non-Resource URLs                     Resource Names   Verbs
tokenreviews.authentication.k8s.io               []                                    []               [create]
selfsubjectaccessreviews.authorization.k8s.io    []                                    []               [create]
selfsubjectrulesreviews.authorization.k8s.io     []                                    []               [create]
subjectaccessreviews.authorization.k8s.io        []                                    []               [create]
serviceexports.multicluster.x-k8s.io             []                                    []               [get list watch create delete]
endpoints                                        []                                    []               [get list watch]
namespaces                                       []                                    []               [get list watch]
nodes                                            []                                    []               [get list watch]
pods                                             []                                    []               [get list watch]
replicationcontrollers                           []                                    []               [get list watch]
secrets                                          []                                    []               [get list watch]
services                                         []                                    []               [get list watch]
...

#
ieast x create-remote-secret --help
Create a secret with credentials to allow Istio to access remote Kubernetes apiservers

ieast x create-remote-secret --name=&quot;east-cluster&quot;
# This file is autogenerated, do not edit.
apiVersion: v1
kind: Secret
metadata:
  annotations:
    networking.istio.io/cluster: east-cluster
  creationTimestamp: null
  labels:
    istio/multiCluster: &quot;true&quot; # 이 레이블이 true로 설정된 시크릿은 이스티오의 컨트롤 플레인이 새 클러스터를 등록하기 위해 감시한다
  name: istio-remote-secret-east-cluster
  namespace: istio-system
stringData:
  east-cluster: |
    apiVersion: v1
    clusters:
    - cluster: # 아래 'certificate-authority-data'는 이 클러스터에 보안 커넥션을 시작하는 데 사용하는 CA
        certificate-authority-data: LS0tLS1CR....
        server: https://east-control-plane:6443
      name: east-cluster
    contexts:
    - context:
        cluster: east-cluster
        user: east-cluster
      name: east-cluster
    current-context: east-cluster
    kind: Config
    preferences: {}
    users:
    - name: east-cluster
      user: # 아래 'token'은 서비스 어카운트의 ID를 나타내는 토큰
        token: eyJhb...
---

## certificate-authority-data 정보 : k8s 루트 인증서
openssl x509 -in YYY -noout -text
...
        Issuer: CN=kubernetes
        Validity
            Not Before: May 23 03:15:44 2025 GMT
            Not After : May 21 03:15:44 2035 GMT
        Subject: CN=kubernetes
        ...
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment, Certificate Sign
            X509v3 Basic Constraints: critical
                CA:TRUE

## user.token 정보 : 
jwt decode YYY
Token header
------------
{
  &quot;alg&quot;: &quot;RS256&quot;,
  &quot;kid&quot;: &quot;ywYVbtznnn9iveoNWvLj-ECZ4-x4dl6RUftGnFRS8v0&quot;
}

Token claims
------------
{
  &quot;iss&quot;: &quot;kubernetes/serviceaccount&quot;,
  &quot;kubernetes.io/serviceaccount/namespace&quot;: &quot;istio-system&quot;,
  &quot;kubernetes.io/serviceaccount/secret.name&quot;: &quot;istio-reader-service-account-token-jlqcc&quot;,
  &quot;kubernetes.io/serviceaccount/service-account.name&quot;: &quot;istio-reader-service-account&quot;,
  &quot;kubernetes.io/serviceaccount/service-account.uid&quot;: &quot;37688420-7381-454b-96b3-8c2c72275ead&quot;,
  &quot;sub&quot;: &quot;system:serviceaccount:istio-system:istio-reader-service-account&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380f5884ece89879894cb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23805d8cc7d5d9a342f566&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;시크릿 내용을 출력하는 대신, kubectl 명령어에 파이프해 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;west-cluster 에 적용&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;하자&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380f7bdb9e3fbba993ab9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# west 에 시크릿 생성
ieast x create-remote-secret --name=&quot;east-cluster&quot; | kwest apply -f -
secret/istio-remote-secret-east-cluster created

# istiod 로그 확인 : 시크릿이 생성되면, 바로 istiod가 이 시크릿을 가지고 새로 추가된 원격 클러스터(east)에 워크로드를 쿼리한다.
kwest logs deploy/istiod -n istio-system | grep 'Adding cluster'
2025-05-23T09:25:28.586415Z     info    Adding cluster  cluster=east-cluster secret=istio-system/istio-remote-secret-east-cluster

# west cluster에 east kubeapi server 접근용 secret이 생성된것을 확인!!
for i in west east; do echo &quot;&amp;gt;&amp;gt; k8s cluster : $i &amp;lt;&amp;lt;&quot;; kubectl get secret -n istio-system --kubeconfig=./$i-kubeconfig; echo; done
&amp;gt;&amp;gt; k8s cluster : west &amp;lt;&amp;lt;
NAME                                               TYPE                                  DATA   AGE
cacerts                                            Opaque                                4      121m
default-token-f624t                                kubernetes.io/service-account-token   3      124m
grafana-token-x2dwt                                kubernetes.io/service-account-token   3      108m
istio-ingressgateway-service-account-token-2wsk4   kubernetes.io/service-account-token   3      108m
istio-reader-service-account-token-qjrzd           kubernetes.io/service-account-token   3      109m
istio-remote-secret-east-cluster                   Opaque                                1      11s
istiod-service-account-token-c4sdr                 kubernetes.io/service-account-token   3      109m
istiod-token-tvjnj                                 kubernetes.io/service-account-token   3      109m
kiali-token-rhrb8                                  kubernetes.io/service-account-token   3      108m
prometheus-token-hpmrz                             kubernetes.io/service-account-token   3      108m

&amp;gt;&amp;gt; k8s cluster : east &amp;lt;&amp;lt;
NAME                                               TYPE                                  DATA   AGE
cacerts                                            Opaque                                4      121m
default-token-5x2q4                                kubernetes.io/service-account-token   3      121m
grafana-token-rtbzk                                kubernetes.io/service-account-token   3      90m
istio-ingressgateway-service-account-token-nbnk5   kubernetes.io/service-account-token   3      90m
istio-reader-service-account-token-jlqcc           kubernetes.io/service-account-token   3      91m
istiod-service-account-token-lf4mv                 kubernetes.io/service-account-token   3      91m
istiod-token-mh2ws                                 kubernetes.io/service-account-token   3      91m
kiali-token-cds6p                                  kubernetes.io/service-account-token   3      90m
prometheus-token-kz6l2                             kubernetes.io/service-account-token   3      90m

kwest get secret -n istio-system istio-remote-secret-east-cluster
kwest get secret -n istio-system istio-remote-secret-east-cluster -o yaml
...

# west 확인 : east 의 모든 CDS/EDS 정보를 west 에서도 확인 가능!
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; k8s cluster : west - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it west-control-plane istioctl proxy-config $i deploy/istio-ingressgateway.istio-system; echo; done
iwest proxy-config cluster deploy/istio-ingressgateway.istio-system | grep catalog

iwest proxy-config cluster deploy/istio-ingressgateway.istio-system --fqdn catalog.istioinaction.svc.cluster.local -o json

# secret이 생성되면서 cluster간 discovery가 가능해져 west cluster에서 east cluster의 Endpoint 정보가 확인된다.
iwest proxy-config endpoint deploy/istio-ingressgateway.istio-system | grep catalog
10.20.0.14:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local

# west 에서 10.20.0.14(10.20.0.0/16)로 라우팅이 가능한 상태인가?
iwest proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80||catalog.istioinaction.svc.cluster.local' -o json
...
                &quot;address&quot;: {
                    &quot;socketAddress&quot;: {
                        &quot;address&quot;: &quot;10.20.0.15&quot;,
                        &quot;portValue&quot;: 3000
...

# east 확인 : west 의 CDS/EDS 정보를 아직 모름!
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; k8s cluster : east - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it east-control-plane istioctl proxy-config $i deploy/istio-ingressgateway.istio-system; echo; done
ieast proxy-config cluster deploy/istio-ingressgateway.istio-system | grep catalog
ieast proxy-config endpoint deploy/istio-ingressgateway.istio-system | grep catalog
10.20.0.14:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23802fb9f0d736fcc8b03c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본-기본 배포&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;primary-primary deployment&lt;/span&gt; 에서는 east 가 west 쿼리 할 수 있게 반대로도 설정하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23809f9433ffe88099bee1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# east 에 시크릿 생성
iwest x create-remote-secret --name=&quot;west-cluster&quot; | keast apply -f -
secret/istio-remote-secret-west-cluster created

# istiod 로그 확인 : 시크릿이 생성되면, 바로 istiod가 이 시크릿을 가지고 새로 추가된 원격 클러스터(east)에 워크로드를 쿼리한다.
keast logs deploy/istiod -n istio-system | grep 'Adding cluster'
2025-05-23T09:56:08.181415Z     info    Adding cluster  cluster=west-cluster secret=istio-system/istio-remote-secret-west-cluster

#
for i in west east; do echo &quot;&amp;gt;&amp;gt; k8s cluster : $i &amp;lt;&amp;lt;&quot;; kubectl get secret -n istio-system --kubeconfig=./$i-kubeconfig; echo; done
keast get secret -n istio-system istio-remote-secret-west-cluster
keast get secret -n istio-system istio-remote-secret-west-cluster -o yaml
...

# east 확인 : west 의 모든 CDS/EDS 정보를 east 에서도 확인 가능!
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; k8s cluster : east - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it east-control-plane istioctl proxy-config $i deploy/istio-ingressgateway.istio-system; echo; done
ieast proxy-config cluster deploy/istio-ingressgateway.istio-system | grep webapp

# east 에서 10.10.0.14(10.10.0.0/16)로 라우팅이 가능한 상태인가?
# 역시 secret이 생성되면서 cluster간 discovery가 가능해져 east cluster에서 west cluster의 webapp의 endpoint discovery가 가능해짐!
ieast proxy-config endpoint deploy/istio-ingressgateway.istio-system | grep webapp
10.10.0.14:8080                                         HEALTHY     OK                outbound|80||webapp.istioinaction.svc.cluster.local&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238030bd14d367bbb8f212&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238059a46cdff2b86dfaaa&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;이제 컨트롤 플레인이 상대 클러스터의 워크로드를 퀴리할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380408fe9f5a4eec966d5&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# catalog stub service 정보 확인 : endpoints 는 아직도 none.
kwest get svc,ep -n istioinaction
NAME              TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/catalog   ClusterIP   10.100.0.87   &amp;lt;none&amp;gt;        80/TCP    93m
service/webapp    ClusterIP   10.100.0.72   &amp;lt;none&amp;gt;        80/TCP    93m

NAME                ENDPOINTS         AGE
endpoints/catalog   &amp;lt;none&amp;gt;            93m
endpoints/webapp    10.10.0.14:8080   93m

# webapp stub service 생성하지 않았으므로 별도 west 의 webapp service 정보가 없다!!
# 앞서 설명했듯이 istio 1.7 이하의 버전에서는 stub service가 있어야 cross cluster의 service에 대한 ip resolve가 가능하다
keast get svc,ep -n istioinaction
NAME              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/catalog   ClusterIP   10.200.0.238   &amp;lt;none&amp;gt;        80/TCP    88m

NAME                ENDPOINTS         AGE
endpoints/catalog   10.20.0.14:3000   88m&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23800eb16cec8612a54dc3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b5a7bfe54054dbbfee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음으로는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 간 연결&lt;/span&gt;을 설정해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380e5b8c9c2100aad92f6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380efa516d3f6dada84c4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;12.3.6 클러스터 간 연결 설정하기&lt;/u&gt;&lt;/span&gt; Setting up cross-cluster connectivity&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a99949df83fab413bf&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : north-south 트래픽, east-west 트래픽&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380fb9173fa5b5293dadd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;4장에서는 이스티오의 인그레스 게이트웨이를 다루면서 엔보이 프록시 기반이라는 것을 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c6a9b1f350223451f7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인그레스 게이트웨이는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 퍼블릭 네트워크에서 시작한 트래픽의 진입점&lt;/span&gt;으로, 트래픽을 조직의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;내부 네트워크&lt;/span&gt;로 보낸다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23808aa460fc2fc582f181&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 유형의 트래픽을 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;north-south 트래픽&lt;/code&gt;이라고도 한다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238073b38cd5830592240f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;한편 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서로 다른 내부 네트워크&lt;/span&gt;(여기서는 클러스터의 네트워크) &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;간의 트래픽&lt;/span&gt;은 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;east-west 트래픽&lt;/code&gt;이라고 한다. (그림 12.12 참조)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23805aacebca90cf75df4d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/89578b26-7074-4ae3-bc38-250da256c2e2/CleanShot_2025-05-17_at_09.25.01/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/89578b26-7074-4ae3-bc38-250da256c2e2/CleanShot_2025-05-17_at_09.25.01/w=828,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/89578b26-7074-4ae3-bc38-250da256c2e2/CleanShot_2025-05-17_at_09.25.01/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;north-south 와 east-west 트래픽&quot; width=&quot;816&quot; height=&quot;419.3784860557769&quot; data-nimg=&quot;1&quot; /&gt;north-south 와 east-west 트래픽&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23801a9cdfe2f2798ee1af&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e4918cfe0a7a48593d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;east-west 트래픽&lt;/code&gt;을 단순화하기 위해, 대부분의 클라우드 프로바이더들은 네트워크 주소 공간이 겹치지 않는다면 가상 네트워크의 피어링을 활성화한다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e4b609ca36ad9bb299&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;피어링된 가상 네트워크의 서비스들은 IPv4 및 IPv6 주소로 직접 커넥션을 시작한다. 그러나 네트워크 피어링은 클라우드 전용 기능이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238027ae2cf3e00a30ef2c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네트워크 피어링이 불가능한, 다른 클라우드 프로바이더나 온프레미스에 있는 클러스터에 연결하고 싶을 때 이스티오가 제공하는 선택지가 east-west 게이트웨이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380a59bb1cf926b74a74d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;게이트웨이는 반대편 클러스터의 워크로드에 접근할 수 있는 로드 밸런서로 노출돼야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380019bbded727b7d6ed6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 절에서는 클러스터 간 연결을 설정하고, 내부적으로 어떻게 동작하는지 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380ce8621e163100d1ac4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238052904bd41d956f4a3a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;이스티오의 east-west 게이트웨이&lt;/u&gt;&lt;/span&gt; ISTIO&amp;rsquo;S EAST-WEST GATEWAY&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c09a2bfc07ad9daeaa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;east-west 게이트웨이&lt;/code&gt;의 목적은 클러스터 간 east-west 트래픽의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;진입점 역할&lt;/span&gt;을 하는 것 뿐 아니라, 이 과정을 서비스 운영 팀에게 투명하게 만드는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380a4b1a2f2f1ea578274&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 목표를 달성하려면 게이트웨이는 반드시 다음을 수행해야 한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238057a8b1df6302b1c141&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 사이의 정밀한 트래픽 관리 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Enable fine-grained traffic management across clusters&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380488f53c18904f46a2c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;암호화된 트래픽 라우팅, 암호화된 상태로 라우팅해야 워크로드 간 상호 인증이 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1fcb8b2c1c2380bca115c9b1c29a1de0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Route encrypted traffic to enable mutual authentication between workloads&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380dc9ef5c3aa7415d998&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b3b952f1d1522c7129&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그리고 서비스 메시 운영자는 어떤 추가 리소스도 구성할 필요가 없어야 한다! 즉, 어떤 이스티오 리소스도 추가 구성할 필요가 없어야 한다! &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;And service mesh operators shouldn&amp;rsquo;t have to configure any additional resources! In other words, you shouldn&amp;rsquo;t have to configure any additional Istio resources!&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380999175e653aaabf067&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이렇게 하면, 트래픽을 클러스터 내에서 라우팅할 때나 클러스터 간에 라우팅할 때 차이가 없다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380508c9fcbb22f1a4290&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;두 시나리오 모두에서 워크로드는 서비스를 세밀하게 겨냥할 수 있고 상호 인증된 커넥션을 시작할 수 있다 (미묘한 차이가 하나 있는데, 클러스터 경계를 넘을 때의 로드 밸런싱이 조금 다르다. 이 부분은 다음 절에서 살펴본다).&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380cdaa97c3c670ee24bb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이것이 어떻게 구현되는지 이해하려면, 이스티오의 두 기능인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI 클러스터&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI 자동 통과&lt;/span&gt;를 소개하고 이들이 게이트웨이의 동작을 어떻게 바꾸는지 살펴봐야 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI clusters&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; and &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI auto passthrough.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238064a58ac3249f533de3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380ee9d02c25c410cac34&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;SNI 클러스터로 east-west 게이트웨이 설정하기&lt;/u&gt;&lt;/span&gt; CONFIGURING EAST-WEST GATEWAYS WITH SNI CLUSTERS&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380a68c4afbe3cb4e84f1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;east-west 게이트웨이&lt;/code&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI 클러스터를 모든 서비스에 추가 설정&lt;/span&gt;한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;인그레스 게이트웨이&lt;/u&gt;&lt;/span&gt;다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;East-west gateways are&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; ingress gateways&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; with additional configuration for Server Name Indication &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(SNI) clusters&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; for &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;every service&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380809855dc1d5d3f1a24&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그럼 SNI 클러스터란 무엇일까?&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238052acf5d7721883b968&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI 클러스터&lt;/span&gt;는 단순히 보통의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 클러스터&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Envoy clusters &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;같은 것으로(10장 10.3.2절의 &amp;lsquo;엔보이 클러스터 설정 쿼리하기&amp;rsquo; 절 참조), 트래픽이 라우팅될 수 있는 유사 워크로드 집합을 묶는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;속성인 방향, 부분집합, 포트, FQDN&lt;/u&gt;&lt;/span&gt;을 포함한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI clusters&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; are just like regular &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Envoy clusters&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; (see chapter 10, section 10.3.2, Querying the Envoy Cluster Configuration subsection), consisting of the&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; direction, subset, port, and FQDN&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; that group a set of similar workloads where traffic can be routed.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380dd87d9c19601c8ec7f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 SNI 클러스터에는 한 가지 주요 차이점이 있다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI 클러스터&lt;/span&gt;는 모든 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 클러스터 정보를 SNI에 인코딩&lt;/span&gt;한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;However, SNI clusters have one key difference: they encode all Envoy cluster information in the SNI.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d48c74cfb8ee7e8dd0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 덕분에 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;east-west 게이트웨이&lt;/code&gt;는 클러스터가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI 안에 지정한 클러스터로 암호화된 트래픽을 라우팅&lt;/span&gt;할 수 있는 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This enables the east-west gateway to proxy encrypted traffic to the cluster specified by the client within the SNI.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23800f9854fb3215cce4b2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;구체적인 예를 들면, 클라이언트(webapp 같은)가 원격 클러스터의 워크로드(catalog 같은)로 커넥션을 시작할 때 그림 12.13 처럼 겨냥하는 클러스터를 SNI에 인코딩한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;To take a concrete example, when one client(such as the webapp) initiates a connection to a workload in a remote cluster(such as the catalog workload) it encodes the cluster that it targets into the SNI, as shown in figure 12.13.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23809c93feeeae86dce73f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/08f62035-cdff-4ffa-b831-e77ba4f0658c/CleanShot_2025-05-17_at_10.29.39/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/08f62035-cdff-4ffa-b831-e77ba4f0658c/CleanShot_2025-05-17_at_10.29.39/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/08f62035-cdff-4ffa-b831-e77ba4f0658c/CleanShot_2025-05-17_at_10.29.39/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;481.97429305912596&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380228d41e43504e384df&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 정보는 SNI에 인코딩된다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e49d86c96a28afc8d7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;SNI에는 라우팅 결정을 지시하는 방향, 포트, 버전, 서비스 이름이 포함된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380e69b1ce02a509cf900&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380049eced0cea82a084d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러므로 클라이언트는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 세밀한 라우팅 결정&lt;/span&gt;을 내릴 수 있으며,&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 게이트웨&lt;/span&gt;이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI 헤더&lt;/span&gt;에서&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 클러스터 정보&lt;/span&gt;를 읽어 트래픽을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라이언트가 의도한 워크로드로 프록시&lt;/span&gt;할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Thus the client can make fine-grained routing decisions, and the gateway can read the cluster information from the SNI header and then proxy the traffic to the workload intended by the client.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380deb105cf8b0199d5a8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 모든 작업이 안전하고 상호 인증한 커넥션을 워크로드 사이에 유지하는 중에 일어난다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;All this happens while maintaining a secure and mutually authenticated connection between the workloads.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23800688e1de3a85345ba7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23800cb4dfc2575bcaf2a8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a498cbfd9a664cc9a4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;SNI 클러스터가 있는 east-west 게이트웨이 설치하기&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; Installing the east-west gateway with SNI clusters&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23808088f0ffa340fecee5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI 클러스터 설정&lt;/span&gt;은 옵트인 기능으로, 다음 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;IstioOpertor&lt;/code&gt; 정의처럼 환경 변수 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ISTIO_META_ROUTER_MODE&lt;/code&gt; 로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;게이트웨이 라우터 모드를&lt;/span&gt; &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;sni-dnat&lt;/code&gt; 으로 설정해서 활성화할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;For a gateway, the configuration of &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI clusters&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; is an &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;opt-in feature&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; that can be enabled by setting the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;gateway router mode&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; to &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;sni-dnat&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; using the environment variable &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ISTIO_META_ROUTER_MODE&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, as shown in the following &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IstioOperator&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; definition:&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23801f9ac4d1d124f248ed&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cat ch12/gateways/cluster-east-eastwest-gateway.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: istio-eastwestgateway # IstioOperator 이름은 앞 선 이스티오 설정 이름과 겹치지 않아야 한다
  namespace: istio-system
spec:
  profile: empty # empty 프로필은 추가 이스티오 구성 요소를 설치하지 않는다
  components:
    ingressGateways:
    - name: istio-eastwestgateway # 게이트웨이 이름
      label:
        istio: eastwestgateway
        app: istio-eastwestgateway
        topology.istio.io/network: east-network
      enabled: true
      k8s:
        env:
        - name: ISTIO_META_ROUTER_MODE # sni-dnat 모드는 트래픽을 프록시하는 데 필요한 SNI 클러스터를 추가한다
          value: &quot;sni-dnat&quot;
        # The network to which traffic is routed
        - name: ISTIO_META_REQUESTED_NETWORK_VIEW # 게이트웨이가 트래픽을 라우팅하는 네트워크(target cluster의 istiod설정 값)
          value: east-network
        service:
          ports:
          ... (생략) ...
  values:
    global:
      meshID: usmesh # 메시, 클러스터, 네트워크 식별 정보
      multiCluster:
        clusterName: east-cluster
      network: east-network
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238006913ac54c33f5b72f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;IstioOperator 리소스 이름은 처음에 컨트롤 플레인 설치하는 데 사용한 리소스와 같아서는 안 된다. 같은 이름을 사용하면 앞 서 설치한 것을 덮어 쓸 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380939dfbcba10cb7575a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ISTIO_META_ROUTER_MODE&lt;/code&gt; 를 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;sni-dnat&lt;/code&gt; 으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;설정하면 SNI 클러스터를 자동으로 구성&lt;/span&gt;한다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;지정하지 않으면&lt;/span&gt; &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;standard&lt;/code&gt; 모드로 돌아가며, 이는 SNI 클러스터를 설정하지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23809fb7befdbb68fb23dc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ISTIO_META_REQUESTED_NETWORK_VIEW&lt;/code&gt; 는 네트워크 트래픽이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프록시되는 곳&lt;/span&gt;을 정의한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380bdb802c2e69a33178c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23801e91f7d61213190299&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;IstioOperator 로&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; east 클러스터&lt;/span&gt;에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east-west 게이트웨이를 설치&lt;/span&gt;하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23804cb2add549a56aee66&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 설치 전 확인
for i in west east; do echo &quot;&amp;gt;&amp;gt; k8s cluster : $i &amp;lt;&amp;lt;&quot;; kubectl get pod -n istio-system -l istio.io/rev=default --kubeconfig=./$i-kubeconfig; echo; done
for i in west east; do echo &quot;&amp;gt;&amp;gt; k8s cluster : $i &amp;lt;&amp;lt;&quot;; kubectl get IstioOperator -n istio-system --kubeconfig=./$i-kubeconfig; echo; done
kwest get IstioOperator -n istio-system installed-state-istio-controlplane -o yaml
keast get IstioOperator -n istio-system installed-state-istio-controlplane -o yaml

# 설치 전 확인 : west 에서 catalog endpoint 에 IP 확인
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; k8s cluster : west - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it west-control-plane istioctl proxy-config $i deploy/istio-ingressgateway.istio-system; echo; done

# eastwest-gateway 설치 후 해당 endpoint가 eastwest-gateway의 lb ip로 변경되는것 확인해보자!!
iwest proxy-config endpoint deploy/istio-ingressgateway.istio-system | grep catalog
10.20.0.14:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local

# IstioOperator 로 east 클러스터에 east-west 게이트웨이를 설치
cat ch12/gateways/cluster-east-eastwest-gateway.yaml
docker cp ./ch12/gateways/cluster-east-eastwest-gateway.yaml east-control-plane:/cluster-east-eastwest-gateway.yaml
ieast install -f /cluster-east-eastwest-gateway.yaml --set values.global.proxy.privileged=true -y

# east 클러스터에 east-west 게이트웨이를 설치 확인
for i in west east; do echo &quot;&amp;gt;&amp;gt; k8s cluster : $i &amp;lt;&amp;lt;&quot;; kubectl get IstioOperator -n istio-system --kubeconfig=./$i-kubeconfig; echo; done
&amp;gt;&amp;gt; k8s cluster : west &amp;lt;&amp;lt;
NAME                                 REVISION   STATUS   AGE
installed-state-istio-controlplane                       7h28m

&amp;gt;&amp;gt; k8s cluster : east &amp;lt;&amp;lt;
NAME                                    REVISION   STATUS   AGE
installed-state-istio-controlplane                          7h10m
installed-state-istio-eastwestgateway                       5s

for i in west east; do echo &quot;&amp;gt;&amp;gt; k8s cluster : $i &amp;lt;&amp;lt;&quot;; kubectl get pod -n istio-system -l istio.io/rev=default --kubeconfig=./$i-kubeconfig; echo; done
&amp;gt;&amp;gt; k8s cluster : west &amp;lt;&amp;lt;
NAME                                    READY   STATUS    RESTARTS   AGE
istio-ingressgateway-5db74c978c-n5zbr   1/1     Running   0          7h28m
istiod-5585445f4c-bs5hk                 1/1     Running   0          7h28m

&amp;gt;&amp;gt; k8s cluster : east &amp;lt;&amp;lt;
NAME                                     READY   STATUS    RESTARTS   AGE
istio-eastwestgateway-866794c798-ppblc   1/1     Running   0          23s
istio-ingressgateway-7f6f8f8d99-c259g    1/1     Running   0          7h10m
istiod-85976468f-gxcqn                   1/1     Running   0          7h10m

keast get IstioOperator -n istio-system installed-state-istio-eastwestgateway -o yaml
...
    ingressGateways:
    - enabled: true
      k8s:
        env:
        - name: ISTIO_META_ROUTER_MODE
          value: sni-dnat
        - name: ISTIO_META_REQUESTED_NETWORK_VIEW
          value: east-network
        service:
          ports:
          - name: status-port
            port: 15021
            targetPort: 15021
          - name: mtls
            port: 15443
            targetPort: 15443
          - name: tcp-istiod
            port: 15012
            targetPort: 15012
          - name: tcp-webhook
            port: 15017
            targetPort: 15017
      label:
        app: istio-eastwestgateway
        istio: eastwestgateway
        topology.istio.io/network: east-network
      name: istio-eastwestgateway
...

# east 정보 확인
ieast proxy-status
NAME                                                    CLUSTER          CDS        LDS        EDS        RDS          ECDS         ISTIOD                     VERSION
catalog-6cf4b97d-68vr7.istioinaction                    east-cluster     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-85976468f-gxcqn     1.17.8
istio-eastwestgateway-866794c798-ppblc.istio-system     east-cluster     SYNCED     SYNCED     SYNCED     NOT SENT     NOT SENT     istiod-85976468f-gxcqn     1.17.8
istio-ingressgateway-7f6f8f8d99-c259g.istio-system      east-cluster     SYNCED     SYNCED     SYNCED     NOT SENT     NOT SENT     istiod-85976468f-gxcqn     1.17.8

# east 에 istio-ingressgateway  에 istio-config 정보 확인 : west 의 CDS/EDS 모두 알고 있음!
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; east k8s cluster : ingressgateway - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it east-control-plane istioctl proxy-config $i deploy/istio-ingressgateway.istio-system; echo; done

# east 에 istio-eastwestgateway 에 istio-config 정보 확인 : webapp(CDS) OK, west 에 EDS 아직 모름!
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; east k8s cluster : eastwestgateway - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it east-control-plane istioctl proxy-config $i deploy/istio-eastwestgateway.istio-system; echo; done

ieast proxy-config cluster deploy/istio-eastwestgateway.istio-system | grep istioinaction
catalog.istioinaction.svc.cluster.local                      80        -          outbound      EDS            
webapp.istioinaction.svc.cluster.local                       80        -          outbound      EDS

ieast proxy-config cluster deploy/istio-eastwestgateway.istio-system --fqdn webapp.istioinaction.svc.cluster.local -o json
ieast proxy-config cluster deploy/istio-eastwestgateway.istio-system --fqdn webapp.istioinaction.svc.cluster.local -o json | grep sni
                        &quot;sni&quot;: &quot;outbound_.80_._.webapp.istioinaction.svc.cluster.local&quot;

ieast proxy-config endpoint deploy/istio-eastwestgateway.istio-system | grep istioinaction
ieast proxy-config endpoint deploy/istio-eastwestgateway.istio-system --cluster 'outbound|80||catalog.istioinaction.svc.cluster.local' -o json


# west 정보 확인
iwest proxy-status

# west 에 istio-ingressgateway 에 istio-config 정보 확인
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; west k8s cluster : ingressgateway - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it west-control-plane istioctl proxy-config $i deploy/istio-ingressgateway.istio-system; echo; done
iwest proxy-config cluster deploy/istio-ingressgateway.istio-system | grep istioinaction
iwest proxy-config cluster deploy/istio-ingressgateway.istio-system --fqdn catalog.istioinaction.svc.cluster.local -o json
iwest proxy-config cluster deploy/istio-ingressgateway.istio-system --fqdn catalog.istioinaction.svc.cluster.local -o json | grep sni
                        &quot;sni&quot;: &quot;outbound_.80_._.catalog.istioinaction.svc.cluster.local&quot;

# west 에 istio-ingressgateway : east EDS 모든 정보에서 east의 eastwestgateway에 mtls 정보로 변경!
iwest proxy-config endpoint deploy/istio-ingressgateway.istio-system | grep istioinaction
10.10.0.14:8080                                         HEALTHY     OK                outbound|80||webapp.istioinaction.svc.cluster.local
172.19.255.202:15443                                    HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local

# 출력되는 172.18.X.Y에 IP 확인 : east 에 eastwestgateway 의 Service(LoadBalancer)의 External-IP.
keast get svc,ep -n istio-system istio-eastwestgateway
NAME                            TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                                                           AGE
service/istio-eastwestgateway   LoadBalancer   10.200.0.191   172.19.255.202   15021:31496/TCP,15443:32213/TCP,15012:31540/TCP,15017:31661/TCP   5m4s

NAME                              ENDPOINTS                                                        AGE
endpoints/istio-eastwestgateway   10.20.0.15:15021,10.20.0.15:15017,10.20.0.15:15012 + 1 more...   5m4s


# west 에 webapp 에 istio-config 정보 확인
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; west k8s cluster : webapp - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it west-control-plane istioctl proxy-config $i deploy/webapp.istioinaction; echo; done
iwest proxy-config endpoint deploy/webapp.istioinaction | grep istioinaction
10.10.0.14:8080                                         HEALTHY     OK                outbound|80||webapp.istioinaction.svc.cluster.local
172.19.255.202:15443                                    HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local


# west 에서 호출 시도
kwest get svc,ep -n istioinaction
NAME              TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/catalog   ClusterIP   10.100.0.87   &amp;lt;none&amp;gt;        80/TCP    6h50m
service/webapp    ClusterIP   10.100.0.72   &amp;lt;none&amp;gt;        80/TCP    6h50m

NAME                ENDPOINTS         AGE
endpoints/catalog   &amp;lt;none&amp;gt;            6h50m
endpoints/webapp    10.10.0.14:8080   6h50m

kwest exec -it deploy/webapp -c istio-proxy -n istioinaction -- curl catalog.istioinaction.svc.cluster.local -v
*   Trying 10.100.0.170:80...
* connect to 10.100.0.170 port 80 failed: Connection refused
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380cb866ee7cba57605a9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b68ac2f9611fe2e5ed&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;east-west 게이트웨이를 설치하고 라우터 모드를 sni-dnat으로 설정했으면, 다음 단계는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI 자동 통과 모드 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI auto passthrough mode&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &lt;/span&gt;를 사용해 east-west 게이트웨이에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다중 클러스터 상호 TLS 포트를 노출&lt;/span&gt;하는 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;With the east-west gateway installed and the router mode set to sni-dnat the next step is to &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;expose the multi-cluster mTLS port &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;through the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east-west gateway&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; using the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI auto passthrough mode&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380098fdcc7cfc3d547a7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 영리해서 딱 그때만 게이트웨이에 SNI 클러스터를 설정한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Istio is clever and only then configures the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;gateway&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; with the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI clusters.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380d79ddbf8d7c8a50283&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a3b26ded6764362389&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;SNI 자동 통과로 클러스터 간 트래픽 라우팅하기&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; ROUTING CROSS-CLUSTER TRAFFIC USING SNI AUTO PASSTHROUGH&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380ad9f18cf90bd67a90b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI 자동 통과&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;auto passthrough&lt;/span&gt; 를 이해하기 위해, 수동 SNI 통과가 SNI 헤더에 기반해 트래픽을 허용하도록 인그레스 게이트웨이를 설정한다는 것을 떠올려보자 (4장의 4.4.2절 참고). &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;To understand &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI auto passthrough&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, let&amp;rsquo;s recall that the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;manual SNI passthrough&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; configures the ingress gateway to admit traffic based on the SNI header.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23801cab4dc8932c528eff&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;허용된 트래픽을 라우팅&lt;/span&gt;하려면 서비스 운영자가 수작업으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VirtualService 리소스를 정의&lt;/span&gt;해야 함을 보여준다 (그림 12.14) &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This shows that to route admitted traffic, service operators have to &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;manually&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; define a &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VirtualService resource&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23809ab5a9dfa1fe6ca27c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/53b6eabf-f2dc-4e2d-a53e-b9b1c8529df6/CleanShot_2025-05-17_at_14.58.00/w=750,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/53b6eabf-f2dc-4e2d-a53e-b9b1c8529df6/CleanShot_2025-05-17_at_14.58.00/w=384,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/53b6eabf-f2dc-4e2d-a53e-b9b1c8529df6/CleanShot_2025-05-17_at_14.58.00/w=750,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;366.97442626953125&quot; height=&quot;273.98090680613507&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238072bd1cc057843ebcd6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23800c9333f2d0f35020dc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI 자동 통과&lt;/span&gt;는 그 이름에서 짐작할 수 있듯이, 허용된 트래픽을 라우팅하자고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VirtualService 를 수작업으로 만들 필요가 없다&lt;/span&gt;. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI auto passthrough&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, as the name suggests, &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;doesn&amp;rsquo;t require manually creating a VirtualService t&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;o route admitted traffic.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380969c0bd12615872fe4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;라우팅은 SNI 클러스터를 사용해 수행&lt;/span&gt;할 수 있는데, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI 클러스터&lt;/span&gt;는 라우터 모드가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;sni-dnat&lt;/span&gt; 일때 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east-west 게이트웨이에서 자동으로 설정&lt;/span&gt;된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;It is done using the SNI clusters, which are configured automatically in the east-west gateway when its router mode is set to sni-dnat.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380d496d1e440663d20a8&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5e45e63f-6a2b-4088-b2af-9d6f3b73d080/CleanShot_2025-05-17_at_15.02.14/w=1200,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5e45e63f-6a2b-4088-b2af-9d6f3b73d080/CleanShot_2025-05-17_at_15.02.14/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5e45e63f-6a2b-4088-b2af-9d6f3b73d080/CleanShot_2025-05-17_at_15.02.14/w=1200,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;548.96875&quot; height=&quot;335.4299874791319&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380e8ac28eec7c4b96ea0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23803facb4dd774c7a966d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;SNI 자동 통과는 이스티오 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Gateway 리소스로 설정&lt;/span&gt;할 수 있다. 다음 정의에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI 헤더의 값&lt;/span&gt;이 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;*.local&lt;/span&gt;&lt;/code&gt; 인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모든 트래픽에 대해 SNI 자동 통과&lt;/span&gt;를 사용한는데, 이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모든 쿠버네티스 서비스&lt;/span&gt;에 해당한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI auto passthrough&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; mode is configured using the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio Gateway resource&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;. In the following definition, we use SNI auto passthrough for all traffic where the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI header matche&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;s the expression &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;*.loca&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;l, which is the case for&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; all Kubernetes services.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23807bb86bf463a5e44ef7&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cat ch12/gateways/expose-services.yaml              
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: cross-network-gateway
  namespace: istio-system
spec:
  selector:
    istio: eastwestgateway # 셀렉터와 일치하는 게이트웨이에만 설정이 적용된다.
  servers:
    - port:
        number: 15443 # 이스티오에서 15443 포트는 멀티 클러스터 상호 TLS 트래픽 용도로 지정된 특수 포트다
        name: tls
        protocol: TLS
      tls:
        mode: AUTO_PASSTHROUGH # SNI 헤더를 사용해 목적지를 해석하고 SNI 클러스터를 사용한다.
      hosts:
        - &quot;*.local&quot; # 정규식 *.local 과 일치하는 SNI에 대해서만 트래픽을 허용한다.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380e4b61ffa15535ce6f9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23808fb5dec4e50ef73807&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;east 클러스터에 적용 시, east-cluster의 워크로드를 west-cluster 에 노출한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238086b8d5e982e8f6d29e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# east 클러스터에 적용하자. east-cluster의 워크로드를 west-cluster 에 노출한다.
cat ch12/gateways/expose-services.yaml
keast apply -n istio-system -f ch12/gateways/expose-services.yaml

# 확인
keast get gw,vs,dr -A
NAMESPACE      NAME                                                AGE
istio-system   gateway.networking.istio.io/cross-network-gateway   16s

# west 에서 호출 시도
kwest get svc,ep -n istioinaction
NAME              TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/catalog   ClusterIP   10.100.0.87   &amp;lt;none&amp;gt;        80/TCP    6h59m
service/webapp    ClusterIP   10.100.0.72   &amp;lt;none&amp;gt;        80/TCP    6h59m

NAME                ENDPOINTS         AGE
endpoints/catalog   &amp;lt;none&amp;gt;            6h59m
endpoints/webapp    10.10.0.14:8080   6h59m

kwest exec -it deploy/webapp -c istio-proxy -n istioinaction -- curl catalog.istioinaction.svc.cluster.local -v
*   Trying 10.100.0.170:80...
* connect to 10.100.0.170 port 80 failed: Connection refused
...


# east 에 istio-ingressgateway  에 istio-config 정보 확인 : 이전 내용과 동일하게 west 의 CDS/EDS 모두 알고 있음!
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; east k8s cluster : ingressgateway - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it east-control-plane istioctl proxy-config $i deploy/istio-ingressgateway.istio-system; echo; done

# east 에 istio-eastwestgateway 에 istio-config 정보 확인 : SNI 자동 통과를 위한 listener 추가 확인!
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; east k8s cluster : eastwestgateway - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it east-control-plane istioctl proxy-config $i deploy/istio-eastwestgateway.istio-system; echo; done

ieast proxy-config listener deploy/istio-eastwestgateway.istio-system
ieast proxy-config listener deploy/istio-eastwestgateway.istio-system | grep istioinaction
0.0.0.0 15443 SNI: outbound_.80_._.webapp.istioinaction.svc.cluster.local; App: istio,istio-peer-exchange,istio-http/1.0,istio-http/1.1,istio-h2                    Cluster: outbound_.80_._.webapp.istioinaction.svc.cluster.local
0.0.0.0 15443 SNI: outbound_.80_._.catalog.istioinaction.svc.cluster.local; App: istio,istio-peer-exchange,istio-http/1.0,istio-http/1.1,istio-h2                   Cluster: outbound_.80_._.catalog.istioinaction.svc.cluster.local

ieast proxy-config listener deploy/istio-eastwestgateway.istio-system --port 15443  -o json
...
                &quot;filterChainMatch&quot;: {
                    &quot;serverNames&quot;: [
                        &quot;outbound_.80_._.catalog.istioinaction.svc.cluster.local&quot;
                 ...
                },
                &quot;filters&quot;: [
                    ...
                    {
                        &quot;name&quot;: &quot;envoy.filters.network.tcp_proxy&quot;,
                        &quot;typedConfig&quot;: {
                            &quot;@type&quot;: &quot;type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy&quot;,
                            &quot;statPrefix&quot;: &quot;outbound_.80_._.catalog.istioinaction.svc.cluster.local&quot;,
                            &quot;cluster&quot;: &quot;outbound_.80_._.catalog.istioinaction.svc.cluster.local&quot;,
...



# west 정보 확인
iwest proxy-status

# west 에 istio-ingressgateway 에 istio-config 정보 확인
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; west k8s cluster : ingressgateway - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it west-control-plane istioctl proxy-config $i deploy/istio-ingressgateway.istio-system; echo; done

# west 에 webapp 에 istio-config 정보 확인
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; west k8s cluster : webapp - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it west-control-plane istioctl proxy-config $i deploy/webapp.istioinaction; echo; done
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380b7a868cbb7ac6f63ac&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d98ccdf81b8d5b70f5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;반대편 클러스터에도 작업 수행. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;west&lt;/span&gt;-cluster 에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east-west 게이트웨이&lt;/span&gt;를 만들고, 그 서비스를 east-cluster 워크로드에 노출.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380408bfcd3565f4c2e4b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# IstioOperator 로 west 클러스터에 east-west 게이트웨이를 설치
cat ch12/gateways/cluster-west-eastwest-gateway.yaml
docker cp ./ch12/gateways/cluster-west-eastwest-gateway.yaml west-control-plane:/cluster-west-eastwest-gateway.yaml
iwest install -f /cluster-west-eastwest-gateway.yaml --set values.global.proxy.privileged=true -y

# west 클러스터에 east-west 게이트웨이를 설치 확인
for i in west east; do echo &quot;&amp;gt;&amp;gt; k8s cluster : $i &amp;lt;&amp;lt;&quot;; kubectl get IstioOperator -n istio-system --kubeconfig=./$i-kubeconfig; echo; done
for i in west east; do echo &quot;&amp;gt;&amp;gt; k8s cluster : $i &amp;lt;&amp;lt;&quot;; kubectl get pod -n istio-system -l istio.io/rev=default --kubeconfig=./$i-kubeconfig; echo; done
kwest get IstioOperator -n istio-system installed-state-istio-eastwestgateway -o yaml
iwest proxy-status
NAME                                                    CLUSTER          CDS        LDS        EDS        RDS          ECDS         ISTIOD                      VERSION
istio-eastwestgateway-6f7995db66-pbz4q.istio-system     west-cluster     SYNCED     SYNCED     SYNCED     NOT SENT     NOT SENT     istiod-5585445f4c-bs5hk     1.17.8
istio-ingressgateway-5db74c978c-n5zbr.istio-system      west-cluster     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-5585445f4c-bs5hk     1.17.8
webapp-5c8b4fff64-2hbwf.istioinaction                   west-cluster     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-5585445f4c-bs5hk     1.17.8

# west 클러스터에 적용하자. east-cluster의 워크로드를 west-cluster 에 노출한다.
cat ch12/gateways/expose-services.yaml
kwest apply -n istio-system -f ch12/gateways/expose-services.yaml

# 확인
kwest get gw,vs,dr -A
NAMESPACE       NAME                                                AGE
istio-system    gateway.networking.istio.io/cross-network-gateway   4s
istioinaction   gateway.networking.istio.io/coolstore-gateway       7h3m

NAMESPACE       NAME                                                       GATEWAYS                HOSTS                         AGE
istioinaction   virtualservice.networking.istio.io/webapp-virtualservice   [&quot;coolstore-gateway&quot;]   [&quot;webapp.istioinaction.io&quot;]   7h3m

kwest get svc,ep -n istioinaction
NAME              TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/catalog   ClusterIP   10.100.0.87   &amp;lt;none&amp;gt;        80/TCP    7h4m
service/webapp    ClusterIP   10.100.0.72   &amp;lt;none&amp;gt;        80/TCP    7h4m

NAME                ENDPOINTS         AGE
endpoints/catalog   &amp;lt;none&amp;gt;            7h4m
endpoints/webapp    10.10.0.14:8080   7h4m

ieast pc clusters deploy/istio-eastwestgateway.istio-system | grep catalog
catalog.istioinaction.svc.cluster.local                                       80        -          outbound      EDS            
outbound_.80_._.catalog.istioinaction.svc.cluster.local                       -         -          -             EDS 

# sni 클러스터 확인
ieast pc clusters deploy/istio-eastwestgateway.istio-system | grep catalog | awk '{printf &quot;CLUSTER: %s\n&quot;, $1}'
CLUSTER: catalog.istioinaction.svc.cluster.local
CLUSTER: outbound_.80_._.catalog.istioinaction.svc.cluster.local # catalog 서비스용 SNI 클러스터

# west 에 webapp 에 istio-config 정보 다시 확인
# east cluster의 eastwest-gateway lb의 external ip가 endpoint로 등록되어 catalog 서비스용 SNI Cluster로 route되도록 설정됨
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; west k8s cluster : webapp - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it west-control-plane istioctl proxy-config $i deploy/webapp.istioinaction; echo; done
&amp;gt;&amp;gt; west k8s cluster : webapp - istio-config endpoint &amp;lt;&amp;lt;
ENDPOINT                                                STATUS      OUTLIER CHECK     CLUSTER
...
172.19.255.202:15443                                    HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a287c5dad07e3f4ff4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380ccb820d41f13806990&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;출력은 catalog 워크로드에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI 클러스터&lt;/span&gt;가 정의됐음을 보여준다! &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The output shows the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI cluste&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;r is defined for the catalog workload!&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380aba951c303d9d8a9b0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그리고 SNI 자동 통과로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;게이트웨이를 설정&lt;/span&gt;했으므로, 게이트웨이에&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 들어오는 트래픽은 SNI 클러스터&lt;/span&gt;를 사용해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;의도한 워크로드로 라우팅&lt;/span&gt;한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;And as we configured the gateway with SNI auto passthrough, incoming traffic on the gateway uses the SNI clusters to route to the intended workloads.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e7a42be1598710c26a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오 컨트롤 플레인&lt;/span&gt;은 이 리소스들의 생성을 지켜보고 있다가, 이제 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 간 트래픽을 라우팅할 수 있는 경로가 존재&lt;/span&gt;함을 발견한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Istio&amp;rsquo;s control plane listens for the creation of these resources and discovers that now a path exists to route crosscluster traffic.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380288001c3b36a365194&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서 컨트롤 플레인은 원격 클러스터에서&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 새로 발견한 엔드포인트로 모든 워크로드를 설정&lt;/span&gt;한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Thus it updates all workloads with the newly discovered endpoints in the remote cluster.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380718955c078f075da69&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23803d8692d71e7aaeb1ed&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;클러스터 간 워크로드 디스커버리 검증하기*&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; VALIDATING CROSS-CLUSTER WORKLOAD DISCOVERY&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c8be31d285891a7f7e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 east-cluster 의 워크로드가 west-cluster 에 노출됐으므로, webapp 엔보이 클러스터가 catalog 워크로드로 향햐는 엔드포인트를 갖고 있으리라 기대된다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e3b7aeffb7b5e9ed32&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 엔드포인트는 네트워크의 catalog 에 대한 요청을 프록시하는 east-west 게이트웨이 주소를 가리켜야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23803ab7f1c1b4c709be82&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 확인하기 위해 east-cluster 의 east-west 게이트웨이 주소(Service)를 알아보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23802392b3d755f77b6f09&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;accesslog&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
keast -n istio-system get svc istio-eastwestgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
172.19.255.202&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380ac86e7cb1ea3c7d36f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 이 값을 west-cluster 의 워크로드가 클러스터 간 트래픽을 라우팅할 때 사용하는 주소와 비교해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c9a8a0e534dacb8c7a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;accesslog&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 
iwest pc endpoints deploy/webapp.istioinaction | grep catalog
172.19.255.202:15443                                    HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238035a4e7ef3c2db913f2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/8f63cc2e-177b-421f-853d-0c5cebb44aa7/CleanShot_2025-05-17_at_18.12.00/w=1200,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/8f63cc2e-177b-421f-853d-0c5cebb44aa7/CleanShot_2025-05-17_at_18.12.00/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/8f63cc2e-177b-421f-853d-0c5cebb44aa7/CleanShot_2025-05-17_at_18.12.00/w=1200,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;576&quot; height=&quot;220.91925465838509&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23807b95eac1264d4ea551&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23805bba8bdbb364b434bb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;catalog 리소스의 엔드포인트가 east-west 게이트웨이의 주소(=east cluster의 east-west gateway lb service의 ip)와 일치하면, 워크로드를 찾을 수 있고 클러스터 간 트래픽이 가능하다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e1bde2ddb07ab80ac9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시 설정을 고려하면 모든 것이 올바르게 설정됐다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380548523fe557f39c064&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;직접 요청을 트리거해 마지막으로 확인해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c6b242e18737c35ab9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# west 에 istio-ingressgateway 인입을 위한 접속 정보 확인
kwest get svc -n istio-system istio-ingressgateway
NAME                           TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)                                                                      AGE
istio-ingressgateway   LoadBalancer   10.100.0.95   172.19.255.101   15021:32170/TCP,80:30000/TCP,443:32359/TCP,31400:31954/TCP,15443:32009/TCP   8h

EXT_IP=$(kwest -n istio-system get svc istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo $EXT_IP
172.19.255.101

#
docker exec -it mypc curl -s -H &quot;Host: webapp.istioinaction.io&quot; http://$EXT_IP/api/catalog | jq
[
  {
    &quot;id&quot;: 1,
    &quot;color&quot;: &quot;amber&quot;,
...

# 신규 터미널 : 반복 접속
alias kwest='kubectl --kubeconfig=./west-kubeconfig'
EXT_IP=$(kwest -n istio-system get svc istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
while true; do docker exec -it mypc curl -s -H &quot;Host: webapp.istioinaction.io&quot; http://$EXT_IP/api/catalog ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380979489d832d88eda72&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238039bbf6f20885f536e6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kiali&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;west&lt;/span&gt;-cluster 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a4afe9ecd9f77744d0&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/d6b729ac-4e1e-4fed-afb1-305d64141eec/CleanShot_2025-05-17_at_18.47.10/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/d6b729ac-4e1e-4fed-afb1-305d64141eec/CleanShot_2025-05-17_at_18.47.10/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/d6b729ac-4e1e-4fed-afb1-305d64141eec/CleanShot_2025-05-17_at_18.47.10/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;440.99999999999994&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23804083a6d22fb6fee17a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380579b33dfbf8312eef9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kiali&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east&lt;/span&gt;-cluster 확인 , mTLS 통신이며 TCP Traffic 와 HTTP(S) 2개 트래픽 흐름으로 확인됨.(초록색 = http / 남색 = tcp) Gateway에서 설정한 tls mode의 passthrough에 의해서 트래픽 흐름이 두개처럼 보이는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b5b843ca6902c821e2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Gateway에 tls mode를 passthrough로 설정&lt;/span&gt;하면 cross cluster east-west 통신의 mTLS통신에서 west의 webapp이 east의 catalog로 traffic을 보낼때, west의 endpoint 정보에 따라 eastwest-gateway로 SNI정보를 담아 보내고 eastwest-gateway에서는 SNI 헤더를 살펴보고 트래픽을 특정 백엔드로 라우팅하고 TLS 커넥션 종료는 그 후 백엔드에서 처리한다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23801eaacbf12e5bf979ea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;게이트웨이가 하는 일은 SNI 헤더를 살펴보고 트래픽을 특정 백엔드로 라우팅하는 것 뿐이다. TLS 커넥션 종료는 그 후 백엔드에서 처리한다!!&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23804495e6e9084ac176d0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;cross cluster통신 뿐만 아니라 single cluster에서도 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Gateway에 tls mode를 passthrough로 설정&lt;/span&gt;하면 동일!!&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c09b11fb83b34a123f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(참고) &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio&lt;/span&gt; 의 TCP Traffic 라우팅과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Traffic routing with SNI passthrough&lt;/span&gt; 는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.4.2&lt;/span&gt; 를 확인하자.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c9ab35d833c2c302db&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: sni-passthrough-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 31400 #1 HTTP 포트가 아닌 특정 포트 열기
      name: tcp-sni
      protocol: TLS
    hosts:
    - &quot;simple-sni-1.istioinaction.io&quot; #2 이 호스트를 포트와 연결
    tls:
      mode: PASSTHROUGH #3 통과 트래픽으로 처리
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: simple-sni-1-vs
spec:
  hosts:
  - &quot;simple-sni-1.istioinaction.io&quot;
  gateways:
  - sni-passthrough-gateway
  tls: 
  - match: #1 특정 포트와 호스트의 비교 부분
    - port: 31400
      sniHosts:
      - simple-sni-1.istioinaction.io
    route:
    - destination: #2 트래픽이 일치하는 경우 라우팅 목적지
        host: simple-tls-service-1
        port:
          number: 80 #3 서비스 포트로 라우팅&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23803bac54e08bd3666f37&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/0b93af2f-986f-4fcd-ac3d-34a2ed55fba4/CleanShot_2025-05-17_at_18.50.27/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/0b93af2f-986f-4fcd-ac3d-34a2ed55fba4/CleanShot_2025-05-17_at_18.50.27/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/0b93af2f-986f-4fcd-ac3d-34a2ed55fba4/CleanShot_2025-05-17_at_18.50.27/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;566.3245175125089&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;p id=&quot;block-1fcb8b2c1c23806da6eacc7bd5e4230f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;실제 traffic은 webapp &amp;mdash;(TCP)&amp;mdash;&amp;gt; istio-eastwestgateway(check SNI) &amp;mdash;(TCP)&amp;mdash;&amp;gt; catalog(여기서 mtls인증서 확인 및 tls termination) &amp;mdash;&amp;gt; backend catalog&lt;/p&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380d38e13da1caec31fb8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23808a90f8de83dd7f3314&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;jaeger : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;west&lt;/span&gt;-cluster 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380ebb3a0fc28e1c47cb2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5795953d-11b2-4a87-b1c8-122a1d51a8cb/CleanShot_2025-05-17_at_18.54.06/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5795953d-11b2-4a87-b1c8-122a1d51a8cb/CleanShot_2025-05-17_at_18.54.06/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5795953d-11b2-4a87-b1c8-122a1d51a8cb/CleanShot_2025-05-17_at_18.54.06/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;69.21298844248761&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23800d8f20fa3eca86c082&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238071ac24d75892fc7ed3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;jaeger : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east&lt;/span&gt;-cluster 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238083b6aad5101ea5da7a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e042aad6-1276-4894-a2a0-d7147e175038/CleanShot_2025-05-17_at_18.54.54/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e042aad6-1276-4894-a2a0-d7147e175038/CleanShot_2025-05-17_at_18.54.54/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e042aad6-1276-4894-a2a0-d7147e175038/CleanShot_2025-05-17_at_18.54.54/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;615.3136265320836&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238081925cf1c92f9247b8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b4a81bd80a67248823&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istio-proxy 로그 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238031bbf3f84ecfbf72f6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# west 에 istio-ingressgateway 로그
kwest logs -n istio-system -l app=istio-ingressgateway -f
[2025-05-23T16:03:56.013Z] &quot;GET /api/catalog HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 357 4 4 &quot;172.19.0.100&quot; &quot;curl/8.7.1&quot; &quot;b0cfca91-bcee-9e84-a7c4-03e71d51bd05&quot; &quot;webapp.istioinaction.io&quot; &quot;10.10.0.14:8080&quot; outbound|80||webapp.istioinaction.svc.cluster.local 10.10.0.9:37008 10.10.0.9:8080 172.19.0.100:42278 - -

# west 에 webapp 로그
kwest logs -n istioinaction -l app=webapp -c istio-proxy -f
[2025-05-23T16:04:03.657Z] &quot;GET /api/catalog HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 357 4 3 &quot;172.19.0.100&quot; &quot;curl/8.7.1&quot; &quot;107fa10a-2963-987a-9305-0a9f0e3df1ca&quot; &quot;webapp.istioinaction.io&quot; &quot;10.10.0.14:8080&quot; inbound|8080|| 127.0.0.6:39631 10.10.0.14:8080 172.19.0.100:0 outbound_.80_._.webapp.istioinaction.svc.cluster.local default
[2025-05-23T16:04:04.751Z] &quot;GET /items HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 502 1 1 &quot;172.19.0.100&quot; &quot;beegoServer&quot; &quot;9b8f7ebc-aacd-9cdd-af4a-efe5098d6cd4&quot; &quot;catalog.istioinaction.svc.cluster.local:80&quot; &quot;172.19.255.202:15443&quot; outbound|80||catalog.istioinaction.svc.cluster.local 10.10.0.14:42424 10.100.0.87:80 172.19.0.100:0 - default

kwest logs -n istioinaction -l app=webapp -c webapp -f
2025/05/23 16:04:17.797 [M] [router.go:1014]  172.19.0.100 - - [23/May/2025 04:04:17] &quot;GET /api/catalog HTTP/1.1 200 0&quot; 0.002664  curl/8.7.1

# west 에 istio-eastwestgateway 로그
kwest exec -it -n istio-system deploy/istio-eastwestgateway -- curl -X POST http://localhost:15000/logging?level=debug
kwest logs -n istio-system -l app=istio-eastwestgateway -f
...



# east 에 istio-eastwestgateway 로그
keast exec -it -n istio-system deploy/istio-eastwestgateway -- curl -X POST http://localhost:15000/logging?level=debug
keast logs -n istio-system -l app=istio-eastwestgateway -f
...

# east 에 catalog 로그
keast logs -n istioinaction -l app=catalog -c istio-proxy -f
[2025-05-23T16:04:29.882Z] &quot;GET /items HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 502 1 0 &quot;172.19.0.100&quot; &quot;beegoServer&quot; &quot;770551b0-d919-981e-9ceb-a4d39400e983&quot; &quot;catalog.istioinaction.svc.cluster.local:80&quot; &quot;10.20.0.14:3000&quot; inbound|3000|| 127.0.0.6:46995 10.20.0.14:3000 172.19.0.100:0 outbound_.80_._.catalog.istioinaction.svc.cluster.local default

keast logs -n istioinaction -l app=catalog -c catalog -f
request path: /items
blowups: {}
number of blowups: 0
GET catalog.istioinaction.svc.cluster.local:80 /items 200 502 - 0.219 ms
GET /items 200 0.219 ms - 502
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380eab212f8e7fddee83a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d1a0ded209c75704f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;west : webapp&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23801eaec3daef413406e2&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kwest exec -it -n istioinaction deploy/webapp -c istio-proxy -- sudo tcpdump -i any tcp -nn
kwest exec -it -n istioinaction deploy/webapp -c istio-proxy -- sudo tcpdump -i lo tcp -nn
kwest exec -it -n istioinaction deploy/webapp -c istio-proxy -- sudo tcpdump -i eth0 tcp -nn
16:04:53.990334 IP 10.10.0.14.42424 &amp;gt; 172.19.255.202.15443: Flags [P.], seq 3649254160:3649255538, ack 539546589, win 696, options [nop,nop,TS val 1407640032 ecr 1480757014], length 1378
16:04:53.991627 IP 172.19.255.202.15443 &amp;gt; 10.10.0.14.42424: Flags [P.], seq 1:1789, ack 1378, win 21266, options [nop,nop,TS val 1480759220 ecr 1407640032], length 1788
...

# src
kwest get po -n istioinaction -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP           NODE                 NOMINATED NODE   READINESS GATES
webapp-5c8b4fff64-2hbwf   2/2     Running   0          7h41m   10.10.0.14   west-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;

# dst
keast get svc -n istio-system istio-eastwestgateway
NAME                    TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)                                                           AGE
istio-eastwestgateway   LoadBalancer   10.200.0.191   172.19.255.202   15021:31496/TCP,15443:32213/TCP,15012:31540/TCP,15017:31661/TCP   60m&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380f2bce5fe1840f59ca8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380628826e7a660501d98&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;east : catalog&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238083a6b9eff3cd167da4&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;crystal&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# istio-proxy 에 tcp port 3000 에서 패킷 덤프에 출력 결과를 파일로 저장 
keast exec -it -n istioinaction deploy/catalog -c istio-proxy -- sudo tcpdump -i any tcp port 3000 -w /var/lib/istio/data/dump.pcap
keast exec -it -n istioinaction deploy/catalog -c istio-proxy -- ls -l /var/lib/istio/data/

# 출력 결과 파일을 로컬로 다운로드
keast get pod -n istioinaction -l app=catalog -oname
pod/catalog-6cf4b97d-68vr7

keast cp -n istioinaction -c istio-proxy catalog-6cf4b97d-68vr7:var/lib/istio/data/dump.pcap ./dump.pcap

# 로컬로 다운 받은 파일을 wireshark 로 불러오기 : XFF 로 요청 Client IP 확인
wireshark dump.pcap
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238075b2f3e84ec9e1eb32&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/a72e8fcc-3644-45f3-bb96-38b2bbfba764/CleanShot_2025-05-18_at_10.34.37/w=2048,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/a72e8fcc-3644-45f3-bb96-38b2bbfba764/CleanShot_2025-05-18_at_10.34.37/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/a72e8fcc-3644-45f3-bb96-38b2bbfba764/CleanShot_2025-05-18_at_10.34.37/w=2048,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;1008&quot; height=&quot;540.6716417910447&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23804c895df24ed3e46fc9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380f1a0c4eaed310f1538&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;west의 인그레스 게이트웨이에 요청을 트리거하면 요청이 west-cluster 의 webapp 으로 라우팅됨을 알 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23800a9e49d69609bc1238&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그런 다음, 요청을 처리하는 east-cluster 의 catalog 워크로드로 해석된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23804999f5d3c384b354e2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이로써 다중 클러스터, 다중 네트워크, 다중 컨트롤 플레인 서비스 메시가 설정됐고 두 클러스터가 서로의 워크로드를 찾을 수 있음을 확인했다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380ae96c5c243d80feb52&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드들은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east-west 게이트웨이를 통과 지점으로 사용해 상호 인증 커넥션&lt;/span&gt;을 시작한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238053bc45c005bb659fee&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a3b1c4f4a88a9b7a31&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;다중 클러스터 서비스 메시를 설정하는데 필요한 것 요약&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b381aae2230108ef24&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 간 워크로드 디스커버리&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Cross-cluster workload discovery&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238077a853e467b86a423c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 어카운트 토큰과 인증서가 포함된 kubeconfig 를 사용해 각 컨트롤 플레인에 동료 클러스터에 대한 접근 권한을 제공함으로써 구현한다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23803eb4eae66a23c9cbc3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 과정은 istioctl 을 사용해 쉽게 진행했고, east-cluster 에만 적용했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1fcb8b2c1c23804e84f0c713d335579f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 간 워크로드 연결&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Cross-cluster workload connectivity&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23805f9c22e80b77a4490d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다른 클러스터의 워크로드(다른 네트워크에 위치) 간에 트래픽을 라우팅하도록 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east-west 게이트웨이&lt;/span&gt;를 설정하고, 이스티오가 워크로드가 위치한 네트워크를 알 수 있도록 각 클러스터에 네트워크 정보 레이블을 지정해 구현한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380f9af8ce53c8dcb4556&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 간 신뢰 설정&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Configuring trust between clusters&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238051b997d2f89e46bdae&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;상대 클러스터와 동일한 루트 신뢰로 중간 인증서를 발급함으로써 설정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380eb9037dfc90894ebd6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23809a980cef0749b35435&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;겨우 몇 단계 정도이며, 대부분 자동화돼 다중 클러스터 서비스 메시를 설정한다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c9bc25e1f48f4bd30f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 절에서는 클러스터 간의 서비스 메시 동작을 몇 가지 확인해본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380f994f1f0583bd65075&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380fdbd9fca9b74656004&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;12.3.7 클러스터 간 로드 밸런싱&lt;/span&gt; Load-balancing across clusters&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a9b778d999038c433f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;클러스터 간 로드 밸런싱&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b0929bfcd9daa553e1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;6장에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 지역 인식 로드 밸런싱&lt;/span&gt;을 살펴보겠다고 약속했다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;In chapter 6, we promised to explore cross-cluster, locality-aware load balancing.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380858fc4e78da8d5e4b9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그리고 이제 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다중 클러스터 서비스 메시&lt;/span&gt;가 있으니 그럴 준비가 됐다. 이를 시연하기 위해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2개의 샘플 서비스&lt;/span&gt;를 배포할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238034a66acd18c931dd47&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 서비스들은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드가 실행 중인 클러스터의 이름을 반환&lt;/span&gt;하도록 설정돼 있다. 그러므로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청을 처리하는 워크로드의 위치&lt;/span&gt;를 쉽게 확인할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;To demonstrate this, we&amp;rsquo;ll deploy two sample services, each of which is configured to return the name of the cluster in which the workload is running.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238020b71bc9bb0ef9a702&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380dab87ff0fb2d06bce2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;west-cluster 에 첫 번째 서비스를 배포해보자. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Thus we can easily determine the locality of the workload that served the request.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380cba3ead1a0034bfbfe&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;armasm&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
tree ch12/locality-aware/west
ch12/locality-aware/west
├── simple-backend-deployment.yaml
├── simple-backend-dr.yaml
├── simple-backend-gw.yaml
├── simple-backend-svc.yaml
└── simple-backend-vs.yaml

# west-cluster 에 간단한 백엔드 디플로이먼트/서비스를 배포
cat ch12/locality-aware/west/simple-backend-deployment.yaml
...
        - name: &quot;MESSAGE&quot;
          value: &quot;Hello from WEST&quot;    
...

cat ch12/locality-aware/west/simple-backend-svc.yaml
kwest apply -f ch12/locality-aware/west/simple-backend-deployment.yaml
kwest apply -f ch12/locality-aware/west/simple-backend-svc.yaml
kwest get deploy -n istioinaction simple-backend-west
kwest get svc,ep -n istioinaction simple-backend

# 트래픽을 허용하기 위해 Gateway, 게이트웨이에서 백엔드 워크로드로 트래픽을 라우팅하기 위해 VirtualService 적용
cat ch12/locality-aware/west/simple-backend-gw.yaml
cat ch12/locality-aware/west/simple-backend-vs.yaml
kwest apply -f ch12/locality-aware/west/simple-backend-gw.yaml
kwest apply -f ch12/locality-aware/west/simple-backend-vs.yaml
kwest get gw,vs,dr -n istioinaction
NAME                                                 AGE
gateway.networking.istio.io/coolstore-gateway        8h
gateway.networking.istio.io/simple-backend-gateway   5s

NAME                                                               GATEWAYS                     HOSTS                                 AGE
virtualservice.networking.istio.io/simple-backend-vs-for-gateway   [&quot;simple-backend-gateway&quot;]   [&quot;simple-backend.istioinaction.io&quot;]   5s
virtualservice.networking.istio.io/webapp-virtualservice           [&quot;coolstore-gateway&quot;]        [&quot;webapp.istioinaction.io&quot;]           8h&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380e48a45f12927bd17c0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238075a0cdc36ebd4064b7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;west-cluster의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스로 요청&lt;/span&gt;하고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 이름을 반환&lt;/span&gt;하는지 확인하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380fe9eb0ecb5adb9040e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# west-cluster의 서비스로 요청하고 클러스터 이름을 반환하는지 확인
EXT_IP=$(kwest -n istio-system get svc istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
docker exec -it mypc curl -s -H &quot;Host: simple-backend.istioinaction.io&quot; http://$EXT_IP | jq &quot;.body&quot;
docker exec -it mypc curl -s -H &quot;Host: simple-backend.istioinaction.io&quot; http://$EXT_IP
{
  &quot;name&quot;: &quot;simple-backend-west&quot;,
  &quot;uri&quot;: &quot;/&quot;,
  &quot;type&quot;: &quot;HTTP&quot;,
  &quot;ip_addresses&quot;: [
    &quot;10.10.0.16&quot;
  ],
  &quot;start_time&quot;: &quot;2025-05-23T16:37:20.204575&quot;,
  &quot;end_time&quot;: &quot;2025-05-23T16:37:20.355776&quot;,
  &quot;duration&quot;: &quot;151.202ms&quot;,
  &quot;body&quot;: &quot;Hello from WEST&quot;,
  &quot;code&quot;: 200
}

# 신규 터미널 : 반복 접속
alias kwest='kubectl --kubeconfig=./west-kubeconfig'
EXT_IP=$(kwest -n istio-system get svc istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
while true; do docker exec -it mypc curl -s -H &quot;Host: simple-backend.istioinaction.io&quot; http://$EXT_IP | jq &quot;.body&quot; ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380b7be2ee3f8528785f3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23807e8323d7128a68c3cc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 east-cluster 에 서비스를 배포하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c88cb9d2601040f416&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
tree ch12/locality-aware/east
ch12/locality-aware/east
├── simple-backend-deployment.yaml
└── simple-backend-svc.yaml

# east-cluster 에 서비스를 배포
cat ch12/locality-aware/east/simple-backend-deployment.yaml
...
        - name: &quot;MESSAGE&quot;
          value: &quot;Hello from EAST&quot;
...

cat ch12/locality-aware/east/simple-backend-svc.yaml
keast apply -f ch12/locality-aware/east/simple-backend-deployment.yaml
keast apply -f ch12/locality-aware/east/simple-backend-svc.yaml
keast get deploy -n istioinaction simple-backend-east
keast get svc,ep -n istioinaction simple-backend
NAME                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/simple-backend   ClusterIP   10.200.0.243   &amp;lt;none&amp;gt;        80/TCP    6s

NAME                       ENDPOINTS   AGE
endpoints/simple-backend               6s
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380708381d1425dfb655b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238024b59bf7af387aec8b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;양쪽 클러스터에서 서비스가 실행되면서 인그레스 게이트웨이에 엔드포인트가 설정돼 요청이 양쪽으로 분산된다 (그림 12.17 참조)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23807baa8dd61a77694446&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/f951706b-6b59-4e52-a854-958005c687b0/CleanShot_2025-05-17_at_23.56.06/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/f951706b-6b59-4e52-a854-958005c687b0/CleanShot_2025-05-17_at_23.56.06/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/f951706b-6b59-4e52-a854-958005c687b0/CleanShot_2025-05-17_at_23.56.06/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;698.9772338867188&quot; height=&quot;412.9865487771314&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23802cacaaf8dc19f5160f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kiali&lt;/span&gt; : west, east&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23803a95aaec1ba556faca&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/d0b2c6c6-4d0b-4b73-af07-18de8a0e3f7f/CleanShot_2025-05-18_at_00.03.58/w=3840,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/d0b2c6c6-4d0b-4b73-af07-18de8a0e3f7f/CleanShot_2025-05-18_at_00.03.58/w=1200,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/d0b2c6c6-4d0b-4b73-af07-18de8a0e3f7f/CleanShot_2025-05-18_at_00.03.58/w=3840,quality=90,fit=scale-down 2x&quot; alt=&quot;west-cluster&quot; width=&quot;1200&quot; height=&quot;552.2559474979491&quot; data-nimg=&quot;1&quot; /&gt;west-cluster&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23806784a8cdd768a508bf&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c6fbabe8-18ff-4c0b-a17d-c8cff8d41fab/CleanShot_2025-05-18_at_00.07.43/w=3840,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c6fbabe8-18ff-4c0b-a17d-c8cff8d41fab/CleanShot_2025-05-18_at_00.07.43/w=1200,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c6fbabe8-18ff-4c0b-a17d-c8cff8d41fab/CleanShot_2025-05-18_at_00.07.43/w=3840,quality=90,fit=scale-down 2x&quot; alt=&quot;east-cluster&quot; width=&quot;1200&quot; height=&quot;625.4071661237786&quot; data-nimg=&quot;1&quot; /&gt;east-cluster&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380b294c6ca9209915acb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380838087cdaaddcbaff3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본적으로, 이스티오는 라운드 로빈 알고리듬으로 워크로드 간에 로드 밸런싱한다. 그러므로 트래픽은 고르게 분산된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a68e65c09b90a87849&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 10회 요청 후 확인
for i in {1..10}; do docker exec -it mypc curl -s -H &quot;Host: simple-backend.istioinaction.io&quot; http://$EXT_IP | jq &quot;.body&quot; ; echo ; done
for i in {1..10}; do docker exec -it mypc curl -s -H &quot;Host: simple-backend.istioinaction.io&quot; http://$EXT_IP | jq &quot;.body&quot; ; echo ; done | sort | uniq -c
   4 &quot;Hello from EAST&quot;
   6 &quot;Hello from WEST&quot;


# 정보 확인
kwest get svc,ep -n istioinaction simple-backend
NAME                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/simple-backend   ClusterIP   10.100.0.162   &amp;lt;none&amp;gt;        80/TCP    4m43s

NAME                       ENDPOINTS         AGE
endpoints/simple-backend   10.10.0.16:8080   4m43s # k8s service 에 endpoint 에는 west 에 파드 ip만 출력

#
for i in listener route cluster endpoint; do echo &quot;&amp;gt;&amp;gt; k8s cluster : west - istio-config $i &amp;lt;&amp;lt;&quot;; docker exec -it west-control-plane istioctl proxy-config $i deploy/istio-ingressgateway.istio-system; echo; done
&amp;gt;&amp;gt; k8s cluster : west - istio-config listener &amp;lt;&amp;lt;
ADDRESS PORT  MATCH DESTINATION
0.0.0.0 8080  ALL   Route: http.8080
...

&amp;gt;&amp;gt; k8s cluster : west - istio-config route &amp;lt;&amp;lt;
NAME          DOMAINS                             MATCH                  VIRTUAL SERVICE
http.8080     simple-backend.istioinaction.io     /*                     simple-backend-vs-for-gateway.istioinaction
...

&amp;gt;&amp;gt; k8s cluster : west - istio-config cluster &amp;lt;&amp;lt;
SERVICE FQDN                                                 PORT      SUBSET     DIRECTION     TYPE           DESTINATION RULE      
simple-backend.istioinaction.svc.cluster.local               80        -          outbound      EDS     
...

&amp;gt;&amp;gt; k8s cluster : west - istio-config endpoint &amp;lt;&amp;lt;
ENDPOINT                                                STATUS      OUTLIER CHECK     CLUSTER
10.10.0.17:8080                                         HEALTHY     OK                outbound|80||simple-backend.istioinaction.svc.cluster.local
172.18.255.202:15443                                    HEALTHY     OK                outbound|80||simple-backend.istioinaction.svc.cluster.local
...

#
iwest proxy-config listener deploy/istio-ingressgateway.istio-system
iwest proxy-config listener deploy/istio-ingressgateway.istio-system --port 8080 -o json

iwest proxy-config route deploy/istio-ingressgateway.istio-system
iwest proxy-config route deploy/istio-ingressgateway.istio-system --name http.8080
iwest proxy-config route deploy/istio-ingressgateway.istio-system --name http.8080 -o json

iwest proxy-config cluster deploy/istio-ingressgateway.istio-system
iwest proxy-config cluster deploy/istio-ingressgateway.istio-system --fqdn simple-backend.istioinaction.svc.cluster.local -o json

iwest proxy-config endpoint deploy/istio-ingressgateway.istio-system

# istio endpoint에서 simple-backend에 대한 2개의 endpoint가 확인되며, Cluster 정보로 모두 같은 SNI를 갖고있다.
# 하나는 west cluster의 simple-backend pod의 ip이고, 나머지 하나는 east cluster의 eastwest-gateway의 metallb ip이다.
iwest proxy-config endpoint deploy/istio-ingressgateway.istio-system | grep simple
10.10.0.16:8080                                         HEALTHY     OK                outbound|80||simple-backend.istioinaction.svc.cluster.local
172.19.255.202:15443                                    HEALTHY     OK                outbound|80||simple-backend.istioinaction.svc.cluster.local

# 아래 정보를 보면 두개의 endpoint정보가 확인되며 별다른 설정이 없어서 현재 1:1 weight로 50:50으로 routing 된다.
iwest proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80||simple-backend.istioinaction.svc.cluster.local' -o json
[
    {
        &quot;name&quot;: &quot;outbound|80||simple-backend.istioinaction.svc.cluster.local&quot;,
        &quot;addedViaApi&quot;: true,
        &quot;hostStatuses&quot;: [
            {
                &quot;address&quot;: {
                    &quot;socketAddress&quot;: {
                        &quot;address&quot;: &quot;10.10.0.16&quot;,
                        &quot;portValue&quot;: 8080
                    }
                &quot;weight&quot;: 1,
                &quot;locality&quot;: {}
            ...
            {
                &quot;address&quot;: {
                    &quot;socketAddress&quot;: {
                        &quot;address&quot;: &quot;172.19.255.202&quot;,
                        &quot;portValue&quot;: 15443
                    }
                &quot;weight&quot;: 1,
                &quot;locality&quot;: {}
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23809ebd2ed25288283013&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23803ebc73eca6d14dcc51&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;좋다! 그러나 워크로드가 트래픽을 라우팅할 때 자신의 지역 내 워크로드를 우선하도록 지역 인식 로드 밸런싱을 사용하면 성능을 더 개선할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;However, performance can be improved further using locality-aware load balancing so workloads prioritize routing traffic to workloads within their locality.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23805a98cfdd1aa3490712&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞선 장들에서 클라우드 프로바이더가 지역성 정보를 노드에 레이블로 추가한다는 점을 언급한 바 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;We mentioned in previous chapters that cloud providers add the locality information into nodes as labels.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380918d62d5b936eae59b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 레이블을 추출한 이 정보를 사용해 워크로드의 지역을 설정한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Istio uses this information retrieved from the labels to configure the locality of workloads.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238072b3b8ee33e77dfd6d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380b3a789e1f25fced9c4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;클러스터 간 &lt;/u&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;지역 인식 라우팅&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; 검증하기&lt;/u&gt;&lt;/span&gt; VERIFYING LOCALITY-AWARE ROUTING ACROSS CLUSTERS&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380438ce0e33ead329289&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습을 위해 노드에 지역성 정보 레이블을 설정하자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380b39cfdde2407d56a56&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;crmsh&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kwest label node west-control-plane 'topology.kubernetes.io/region=westus'
kwest label node west-control-plane 'topology.kubernetes.io/zone=0'
kwest get node -o yaml
...
      topology.kubernetes.io/region: westus
      topology.kubernetes.io/zone: &quot;0&quot;
...

keast label node east-control-plane 'topology.kubernetes.io/region=eastus'
keast label node east-control-plane 'topology.kubernetes.io/zone=0'
keast get node -o yaml
...
      topology.kubernetes.io/region: eastus
      topology.kubernetes.io/zone: &quot;0&quot;
...

# istio eds 에 정보 반영을 위해 파드 재기동하자 : isiotd 가 노드의 지역성 정보 레이블을 엔드포인트 설정할 때 워크로드로 전파.
iwest proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80||simple-backend.istioinaction.svc.cluster.local' -o json
...
                &quot;weight&quot;: 1,
                &quot;locality&quot;: {}
...

kwest rollout restart -n istio-system deploy/istio-ingressgateway
kwest rollout restart -n istio-system deploy/istio-eastwestgateway
kwest rollout restart -n istioinaction deploy/simple-backend-west
keast rollout restart -n istio-system deploy/istio-ingressgateway
keast rollout restart -n istio-system deploy/istio-eastwestgateway
keast rollout restart -n istioinaction deploy/simple-backend-east

iwest proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80||simple-backend.istioinaction.svc.cluster.local' -o json
...
                &quot;weight&quot;: 1,
                &quot;locality&quot;: {
                    &quot;region&quot;: &quot;eastus&quot;, # east-cluster 에 있는 워크로드의 위치 정보
                    &quot;zone&quot;: &quot;0&quot;
                }
   ...
                &quot;weight&quot;: 1,
                &quot;locality&quot;: {
                    &quot;region&quot;: &quot;westus&quot;, # west-cluster 에 있는 워크로드의 위치 정보
                    &quot;zone&quot;: &quot;0&quot;
                }
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23808daf39edc9ca3af1c7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380bc98b0ec47a089f47c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지역성 정보를 사용하려면 수동적 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;passive&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;헬스 체크가 필수&lt;/span&gt;라고 했던 것을 기억하자.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c0b6c2e5d7bd487681&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔드포인트 상태를 수동적으로 확인하도록, 이상값 감지를 사용하는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;DestinationRole&lt;/code&gt; 을 적용해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238096ad76c28a51e15a7a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
cat ch12/locality-aware/west/simple-backend-dr.yaml
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: simple-backend-dr
  namespace: istioinaction
spec:
  host: simple-backend.istioinaction.svc.cluster.local
  trafficPolicy:
    connectionPool:
      http:
        http2MaxRequests: 10
        maxRequestsPerConnection: 10
    outlierDetection:
      consecutive5xxErrors: 1
      interval: 20s
      baseEjectionTime: 30s

kwest apply -f ch12/locality-aware/west/simple-backend-dr.yaml
kwest get gw,vs,dr -n istioinaction

# 확인
iwest proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80||simple-backend.istioinaction.svc.cluster.local' -o json
iwest proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80||simple-backend.istioinaction.svc.cluster.local'
ENDPOINT                 STATUS      OUTLIER CHECK     CLUSTER
10.10.0.18:8080          HEALTHY     OK                outbound|80||simple-backend.istioinaction.svc.cluster.local
172.19.255.202:15443     HEALTHY     OK                outbound|80||simple-backend.istioinaction.svc.cluster.local&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238056a83feb3157897e2f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380be8288ea0960ece43f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;몇 초 정도 걸려 설정이 전파되면, 요청이 지역 정보를 사용해 동일 클러스터 안에서 라우팅 되는 것을 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380508539e958cd613cc0&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 
EXT_IP=$(kwest -n istio-system get svc istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
docker exec -it mypc curl -s -H &quot;Host: simple-backend.istioinaction.io&quot; http://$EXT_IP
docker exec -it mypc curl -s -H &quot;Host: simple-backend.istioinaction.io&quot; http://$EXT_IP | jq &quot;.body&quot;

# 동일 클러스터 안에서 라우팅 되는 것을 확인
for i in {1..20}; do docker exec -it mypc curl -s -H &quot;Host: simple-backend.istioinaction.io&quot; http://$EXT_IP | jq &quot;.body&quot; ; echo ; done | sort | uniq -c
 20 &quot;Hello from WEST&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380df9fd0f8875140eada&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b28702eea2f797b669&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기대한 대로 모든 요청은 west-cluster 내에서 라우팅되는데, 트래픽을 라우팅하는 인그레스 게이트웨이에서 가장 가깝기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e9a189cd80026ec913&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 모든 라우팅 결정을 엔보이 프록시가 내리므로, 컨트롤 플레인이 엔보이 프록시의 설정을 수정했으리라고 결론지을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23801fb711f62d3466cb0c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
iwest proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80||simple-backend.istioinaction.svc.cluster.local' -o json
...
                &quot;weight&quot;: 1,
                &quot;locality&quot;: { 
                    &quot;region&quot;: &quot;westus&quot;, # priority 가 없으면(생략 시), 0으로 우선 순위가 가장 높음
                    &quot;zone&quot;: &quot;0&quot;
                }
            ...
                &quot;weight&quot;: 1,
                &quot;priority&quot;: 1, # priority 0 다음으로, 두 번쨰 우선순위
                &quot;locality&quot;: {
                    &quot;region&quot;: &quot;eastus&quot;,
                    &quot;zone&quot;: &quot;0&quot;
                }
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23800098cec81d595cd7ce&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;우선순위가 가장 높은 호스트가 사용할 수 없는 상태가 되면, 트래픽은 우선순위가 낮은 호스트로 라우팅된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23802787c5dd7c3c3cc06a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380ada84ddb9c26e4b142&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;클러스터 간 &lt;/u&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;장애 극복&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; 확인하기&lt;/u&gt;&lt;/span&gt; VERIFYING CROSS-CLUSTER FAILOVER&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380a7bb5ae2988b4e1931&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;간단한 백엔드 디플로이먼트가 실패하는 상황을 시뮬레이션하려면, 환경 변수 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ERROR_RATE&lt;/code&gt; 값을 1로 설정해 요청이 실패하게 만들자.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b6b8f4c44d0fca267b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;시간이 조금 지나면, 이상값 감지가 호스트가 비정상임을 감지하고 트래픽을 우선순위가 두 번째인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east&lt;/span&gt;-cluster 워크로드로 라우팅한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380dd9071cba975f05626&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 신규 터미널 : 반복 접속 해두기
while true; do docker exec -it mypc curl -s -H &quot;Host: simple-backend.istioinaction.io&quot; http://$EXT_IP | jq &quot;.body&quot; ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done
...
&quot;Hello from WEST&quot;
                 2025-05-24 01:57:49

&quot;Hello from WEST&quot;
                 2025-05-24 01:57:51

&quot;Hello from EAST&quot;
                 2025-05-24 01:57:52
...


#
kwest -n istioinaction set env deploy simple-backend-west ERROR_RATE='1'
kwest exec -it -n istioinaction deploy/simple-backend-west -- env | grep ERROR
ERROR_RATE=1

#
iwest proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80||simple-backend.istioinaction.svc.cluster.local'
ENDPOINT                 STATUS      OUTLIER CHECK     CLUSTER
10.10.0.20:8080          HEALTHY     FAILED            outbound|80||simple-backend.istioinaction.svc.cluster.local
172.19.255.202:15443     HEALTHY     OK                outbound|80||simple-backend.istioinaction.svc.cluster.local
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380f494e6d8d41eb956d4&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ce42ad28-91cb-4494-b426-2756892fe3ca/CleanShot_2025-05-18_at_09.32.19/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ce42ad28-91cb-4494-b426-2756892fe3ca/CleanShot_2025-05-18_at_09.32.19/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ce42ad28-91cb-4494-b426-2756892fe3ca/CleanShot_2025-05-18_at_09.32.19/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;423.88732394366195&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380e5bf1aefd2ae9756da&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/07ee0e62-5810-4661-840d-8324d79e29d4/CleanShot_2025-05-18_at_09.38.11/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/07ee0e62-5810-4661-840d-8324d79e29d4/CleanShot_2025-05-18_at_09.38.11/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/07ee0e62-5810-4661-840d-8324d79e29d4/CleanShot_2025-05-18_at_09.38.11/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;543.3700787401575&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23806b920beb5a089c5470&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 결과는 클러스터 간 장애 극복이 작동함을 보여준다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238071a067f05cd029a2d7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238063be61d5e509ebd859&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 간 트래픽은 상대 클러스터의 east-west 게이트웨이를 통과하며 SNI 통과로 처리된다는 것을 알 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;As seen in this detailed walkthrough, cross-cluster traffic traverses the opposite cluster&amp;rsquo;s east-west gateway and is treated as an SNI passthrough.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238014874fc3095de18234&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 원격 클러스터에 도달한 트래픽의 로드 밸런싱에 영향을 미친다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This has implications for load balancing once traffic reaches the remote cluster.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c9b25cd580474f8385&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 호출은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI/TCP 커넥션&lt;/span&gt;이라&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 게이트웨이가 TLS 커넥션을 종료하지 않으&lt;/span&gt;므로, east-west 게이트웨이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;커넥션을 그대로 백엔드 서비스에 전달&lt;/span&gt;할 수 밖에 없다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Since this call is an SNI/TCP connection and the gateway does not terminate the TLS connection, the east-west gateway can only forward the connection as is to the backend service. &lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23809b9285d2ba95a700a0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이렇게 되면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;커넥션&lt;/span&gt;이 east-west 게이트웨이에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;백엔드 서비스까지 이어지기 때문에 요청 단위로 로드 밸런싱되지 않는다.&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This opens a connection from the east-west gateway to the backend service and does not have request-level load-balancing capabilities.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23808c82e8f411acd7760c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러므로 클러스터 사이의 장애 극복이나 로드 밸런싱에서는, 클라이언트의 관점으로는 부하 분산이나 장애 극복이 수행되지만 트래픽이 원격 클러스터의 모든 인스턴스 사이에서 반드시 균등하게 분산되는 것은 아니다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Thus, on failover or load balancing across multiple clusters, the load is balanced or failed over from the client&amp;rsquo;s point of view but not necessarily balanced evenly across all instances on the remote cluster.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380ddba54ce96f4045bf9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# (옵션)
keast get deploy -n istioinaction simple-backend-east
keast scale deploy -n istioinaction simple-backend-east --replicas 2
keast get pod -n istioinaction -l app=simple-backend -owide
NAME                                   READY   STATUS    RESTARTS   AGE     IP           NODE                 NOMINATED NODE   READINESS GATES
simple-backend-east-57fff57cbc-mrpz7   2/2     Running   0          4s      10.20.0.20   east-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;
simple-backend-east-57fff57cbc-rsjj8   2/2     Running   0          8m52s   10.20.0.19   east-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;

keast logs -n istio-system -l app=istio-eastwestgateway -f
[2025-05-23T17:00:03.479Z] &quot;- - -&quot; 0 - - - &quot;-&quot; 24077 25394 72725 - &quot;-&quot; &quot;-&quot; &quot;-&quot; &quot;-&quot; &quot;10.20.0.19:8080&quot; outbound_.80_._.simple-backend.istioinaction.svc.cluster.local 10.20.0.17:52606 10.20.0.17:15443 10.20.0.1:30549 outbound_.80_._.simple-backend.istioinaction.svc.cluster.local -
[2025-05-23T16:58:59.706Z] &quot;- - -&quot; 0 - - - &quot;-&quot; 20492 21766 151569 - &quot;-&quot; &quot;-&quot; &quot;-&quot; &quot;-&quot; &quot;10.20.0.19:8080&quot; outbound_.80_._.simple-backend.istioinaction.svc.cluster.local 10.20.0.17:42680 10.20.0.17:15443 10.20.0.1:27937 outbound_.80_._.simple-backend.istioinaction.svc.cluster.local -
[2025-05-23T17:00:42.201Z] &quot;- - -&quot; 0 - - - &quot;-&quot; 20492 21768 54084 - &quot;-&quot; &quot;-&quot; &quot;-&quot; &quot;-&quot; &quot;10.20.0.20:8080&quot; outbound_.80_._.simple-backend.istioinaction.svc.cluster.local 10.20.0.17:41558 10.20.0.17:15443 10.20.0.1:23386 outbound_.80_._.simple-backend.istioinaction.svc.cluster.local -
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a4a3a8eb9b62df5739&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23802da840ca87fbbc8a7a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;인가 정책&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;을 사용해 클러스터 간 접근 제어 확인하기&lt;/u&gt;&lt;/span&gt; VERIFYING CROSS-CLUSTER ACCESS CONTROL USING AUTHORIZATION POLICIES&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23804d9dbac65ac28b4342&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마지막으로 확인할 기능은 클러스터 사이의 접근 제어다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;verify is access control across clusters&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380499ee0c64d611937f5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;접근 제어를 하려면 워크로드가 트래픽을 서로 인증해, 트래픽을 승인하거나 거부하는 결정을 내리는 데 사용 가능한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;믿을 수 있는 메타데이터&lt;/span&gt;를 만들어야 한다는 점을 기억하자.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380979665dc11cabc76a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 시연하기 위해 시나리오를 생각해보자.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238020a7cbd5548d2373e8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트래픽 출처가 인그레스 게이트웨이인 경우에만 서비스로의 트래픽을 허용&lt;/span&gt;하고 싶다고 해보자. 출처가 다르면 거절한다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380a0925afab1745cc76a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇게 하기 위한 정책을 정의해 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ch12/security/allow-only-ingress-policy.yaml&lt;/code&gt; 파일에 저장해뒀다. 이를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east&lt;/span&gt;-cluster 에 적용하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23809aa23bc006a776d60f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 적용 전에 west-cluster 서비스를 제거해서 east 에서만 트래픽을 처리하게 하자 &amp;gt;&amp;gt; 이미 위에서 장애 상황이라 안해도 되긴함
kwest delete deploy simple-backend-west -n istioinaction

#
cat ch12/security/allow-only-ingress-policy.yaml
apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;AuthorizationPolicy&quot;
metadata:
  name: &quot;allow-only-ingress&quot;
  namespace: istioinaction
spec:
  selector:
    matchLabels:
      app: simple-backend
  rules:
  - from:
    - source:
        principals: [&quot;cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account&quot;] # istio-ingressgateway를 통과한 traffic만 해당 spiffe 정보를 갖고있다.

keast apply -f ch12/security/allow-only-ingress-policy.yaml
keast get authorizationpolicy -A
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380b7a77ed27883af3ce8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380f49f6cc69ae19e64ac&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;업데이트가 전파되고 나면, west-cluster 의 워크로드에서 요청을 만들어 정책을 시험해보자. 이를 위해 임시 파드를 실행한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380608ee2ffe9a93f561a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kwest run netshoot -n istioinaction --rm -it --image=nicolaka/netshoot -- zsh
-----------------------------------
#
curl -s webapp.istioinaction/api/catalog

# 직접 요청하면 실패!-&amp;gt; src가 istio-ingressgateway가 아니기떄문에 AuthorizationPolicy에 의해 access denied됨
curl -s simple-backend.istioinaction.svc.cluster.local
RBAC: access denied

# istio-ingressgateway 로 요청하면 성공!
curl -s -H &quot;Host: simple-backend.istioinaction.io&quot; http://istio-ingressgateway.istio-system
{
  &quot;name&quot;: &quot;simple-backend-east&quot;,
  &quot;uri&quot;: &quot;/&quot;,
  &quot;type&quot;: &quot;HTTP&quot;,
  &quot;ip_addresses&quot;: [
    &quot;10.20.0.19&quot;
  ],
  &quot;start_time&quot;: &quot;2025-05-23T17:05:12.690726&quot;,
  &quot;end_time&quot;: &quot;2025-05-23T17:05:12.841887&quot;,
  &quot;duration&quot;: &quot;151.163ms&quot;,
  &quot;body&quot;: &quot;Hello from EAST&quot;,
  &quot;code&quot;: 200
}

# kiali 등 확인을 위해 반복 접속 실행
watch curl -s simple-backend.istioinaction.svc.cluster.local
watch 'curl -s -H &quot;Host: simple-backend.istioinaction.io&quot; http://istio-ingressgateway.istio-system'

exit
-----------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238034b968e4412621571b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;정책이 인그레스 게이트웨이에서 들어온 트래픽을 허용한 것을 볼 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238013b36cc221c22b9cbe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 워크로드가 클러스터 간에 상호 인증해서 정책이 ID 인증서에 인코딩된 인증 데이터를 접근 제어에 사용할 수 있음을 보여준다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238003b946c387f15447a6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c8bc6bceb66d1d6e62&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;로드 밸런싱, 지역 인식 라우팅, 클러스터 간 장애 극복, 상호 인증 트래픽, 접근 제어에 대한 우리의 모든 예제는 다중 클러스터 서비스 메시에서의 워크로드가 실행 중인 클러스터가 어디든 상관없이 이스티오의 모든 기능을 사용할 수 있음을 보여준다. 그리고 설정을 따로 더 하지 않아도 그럴 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23808980a2f7d42b8d54c1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;바라건데, 이번 장이 이스티오가 조직 내에서 어떻게 확장하는지, 어떻게 여러 클러스터를 단일 메시로 통합하는지, 여러 조직에게 그것이 왜 중요한지를 충분히 보여줬길 바란다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380f8a73cd72e4e1932e1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다름장에서는 가상머신을 서비스 메시로 통합해본다. 이는 레거시 워크로드를 운영해야 하는 성숙한 기업에게 아주 가치 있는 기능이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c2ab67d63424aadf3e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380699faed2284983f3ff&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380708220fc6a664cc0f7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238030bb4cc5ccc61b148e&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;12.3.8. Summary&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b59134fb2fd81fa6a9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;참고&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380eda85eca03689de63f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;[사례] 토스 + 토스뱅크 Istio 배포 모델 : 계열사와의 통신&lt;/code&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.youtube.com/watch?v=4sJd6PIkP_s&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Youtube&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238038a7f6e6a196ecbf49&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아키텍처&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23804f9961e71bd1ac6e96&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/96d8ae1c-0cbd-4ec2-9220-354481da679a/CleanShot_2025-05-16_at_13.23.14/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/96d8ae1c-0cbd-4ec2-9220-354481da679a/CleanShot_2025-05-16_at_13.23.14/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/96d8ae1c-0cbd-4ec2-9220-354481da679a/CleanShot_2025-05-16_at_13.23.14/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;245.89830508474577&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23807586a3e07258685c01&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23801c9dfeda4abd7c93df&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;접근 정책 : Sidecar&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238052bafdecc0b26c3cc1&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/182428f6-16f3-473c-8670-c2b239db2666/CleanShot_2025-05-16_at_13.23.43/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/182428f6-16f3-473c-8670-c2b239db2666/CleanShot_2025-05-16_at_13.23.43/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/182428f6-16f3-473c-8670-c2b239db2666/CleanShot_2025-05-16_at_13.23.43/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;293.0793650793651&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23805eb793fcebff23a03c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380558ceefb8206b5d691&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이중화된 클러스터에 대한 CA 공유 : (유추) 토스 P-R 클러스터 &amp;larr; 메시 연합 &amp;rarr; 토스뱅크 P-R 클러스터&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23807f8618f8607587ea51&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/94207702-e51a-48ca-8169-5a2d510bded3/CleanShot_2025-05-16_at_13.24.37/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/94207702-e51a-48ca-8169-5a2d510bded3/CleanShot_2025-05-16_at_13.24.37/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/94207702-e51a-48ca-8169-5a2d510bded3/CleanShot_2025-05-16_at_13.24.37/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;491.3068267066767&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380a28cd0f605948e84c0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380d7b966d0ba7bf8566e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(참고) Gloo Mesh 솔루션 기반의 Multi-Cluster 라우팅 : 3개의 Datacenter&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;&lt;a id=&quot;block-1fcb8b2c1c238069a763de808e11dc26&quot; class=&quot;notion-link notion-file&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; border-radius: 3px; color: inherit;&quot; href=&quot;https://assets.super.so/b27a22c8-1220-4332-8c7b-b84c768ca5d7/files/e63f2c43-8e46-4c22-9cd3-88d78380ed28/OSC%E1%84%8F%E1%85%A9%E1%84%85%E1%85%B5%E1%84%8B%E1%85%A1-solo-io-%E1%84%87%E1%85%A1%E1%86%AF%E1%84%91%E1%85%AD%E1%84%8C%E1%85%A1%E1%84%85%E1%85%AD-%E1%84%87%E1%85%A2%E1%84%91%E1%85%A9%E1%84%8B%E1%85%AD%E1%86%BC.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
&lt;div style=&quot;box-sizing: border-box; display: flex; padding: 5px 0px; margin: 2px 0px; transition: background 120ms ease-in; border-radius: 3px;&quot;&gt;
&lt;div class=&quot;notion-file__icon&quot; style=&quot;box-sizing: border-box; margin-inline: 2px 4px; width: 1.5rem; text-align: center;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem;&quot; class=&quot;notion-file__title&quot;&gt;OSC코리아-solo-io-발표자료-배포용.pdf&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; margin-inline-start: 6px; color: #7d7c78; font-size: 0.75rem;&quot; class=&quot;notion-file__size&quot;&gt;3241.6KB&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/a&gt;
&lt;div id=&quot;block-1fcb8b2c1c23808d8a5ec5dcdd5eb69c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/0698a38a-ee39-48b1-826d-8481de565be6/CleanShot_2025-05-18_at_12.07.22/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/0698a38a-ee39-48b1-826d-8481de565be6/CleanShot_2025-05-18_at_12.07.22/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/0698a38a-ee39-48b1-826d-8481de565be6/CleanShot_2025-05-18_at_12.07.22/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;1101.6840113528856&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23800c8691fa3b737a8b93&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238057876cffeab83cb012&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;실습 후 kind 삭제&lt;/span&gt; : &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;kind delete cluster --name &lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;west&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt; &amp;amp;&amp;amp; kind delete cluster --name &lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;east&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt; &amp;amp;&amp;amp; docker rm -f &lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;mypc&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380e19029fea3617c63ce&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380908ffbdad021f20223&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;14&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380648ab5e8ab0082e503&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 요청 처리 기능 확장하기&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1fcb8b2c1c23806e8259cbbd4d0d2b37&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;This chapter covers&lt;/code&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Extending Istio on the request path&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c238099a8f7f27085d91e1d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://www.anyflow.net/sw-engineer/istio-overview-4&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e2747b64-02b8-4906-b857-20cbbfed15d3/image/w=2048,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e2747b64-02b8-4906-b857-20cbbfed15d3/image/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e2747b64-02b8-4906-b857-20cbbfed15d3/image/w=2048,quality=90,fit=scale-down 2x&quot; alt=&quot;https://www.anyflow.net/sw-engineer/istio-overview-4&quot; width=&quot;1008&quot; height=&quot;279.0703125&quot; data-nimg=&quot;1&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238080927cedfb599c7de3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 필터 이해하기&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380368bc6c74bad280b6e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EnvoyFilter&lt;/span&gt; 리소스를 사용해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 직접 설정&lt;/span&gt;하기 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Using Istio&amp;rsquo;s EnvoyFilter resource to configure Envoy directly&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238013bb34d45d700985b4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;루아&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Lua&lt;/span&gt; 를 사용해 요청 경로 커스터마이징하기 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Using Lua to customize the request path&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380749d80ebc92eafe400&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;웹어셈블리&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;WebAssembly&lt;/span&gt; 를 사용해 요청 경로 커스터마이징하기 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Using WebAssembly to customize the request path&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23801cb133f4aecf5a3fc5&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380a3a6efd81733da6a46&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지금까지 살펴본 것처럼, 이스티오는 애플리케이션 네트워킹 기능으로 조직에 많은 가치를 제공할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23801eab05d3e356234cf6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇지만 이스티오를 채택하는 조직에는 이스티오의 기본 버전이 충족하지 못하는 제약이나 가정이 있을 가능성이 높다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23800ca370cb5244ff2f42&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서 이런 제약을 잘 충족시키도록 이스티오 기능의 확장이 필요할 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;You will likely need to extend Istio&amp;rsquo;s capabilities to more nicely fit within these constraints.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c08c1fda437fd440ed&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380409555fb06cfe8d8bc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;3장에서 살펴봤고 이 책에서 내내 강조했듯이, 엔보이 프록시는 이스티오 서비스 메시의 기본 구성 요소다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380a3b107d7a9f66e14fa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 메시 내부 서비스 사이의 요청 경로에서 애플리케이션 인스턴스와 함께 있는 서비스 프록시다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23805087a6df246d4b2507&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이에 서비스의 애플리케이션 네트워킹을 간단하게 만들어줄 수 있는 중요한 기능 집합이 있기는 하지만, 맞춤형 통합 혹은 통합 최종 단계를 위해서는 엔보이를 강화해야 하는 상황에 직면할 수 있다. 다음은 그 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;확장의 예시&lt;/span&gt;들이다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380a28101e27b2670b847&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;속도 제한&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;rate limiting&lt;/span&gt; 혹은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;외부 인가 서비스&lt;/span&gt;와 통합 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Integrating with rate limiting or external authorization services&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23806eba03d0aabc6172d2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;헤더&lt;/span&gt; 추가, 제거, 수정 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Adding, removing, or modifying headers&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238068a0a0eafb9f667e60&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청 페이로드를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;보강&lt;/span&gt;하기 위해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다른 서비스 호출&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Calling out to other services to enrich a request payload&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380a183c9c78eb205a825&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;HMAC 서명/검증 같은&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 사용자 정의 프로토콜&lt;/span&gt; 구현 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;Implementing custom protocols like HMAC signing/verification&lt;/u&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e38c02dba0f97015a8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;비표준 보안 토큰&lt;/span&gt; 처리 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Non-standard security token handling&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23804c8ed3de9ee9175a8e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23801aba7bf18b173e69ec&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 사용자에게 필요한 거의 모든 것을 제공할 수 있지만, 결국은 사용자의 특정 사용 사례에 맞게 맞춤 조정해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380fdb473fe77db3ef317&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 장에서는 요청 경로에서 이스티오를 확장하는 것을 다루는데, 이는 필연적으로 엔보이 확장을 의미하게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380c39ea7c8185d6560d8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23801e8a6fe107d5b61bb7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1fcb8b2c1c238066b67dc9375a903191&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;14.1. 엔보이의 확장 기능&lt;/p&gt;
&lt;div id=&quot;block-1fcb8b2c1c238067bea1f69321d2a077&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;[강력 추천 공식 문서] &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Envoy Life of a Request&lt;/code&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/life_of_a_request&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fcb8b2c1c238053b42ef76d5cacc95e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://assets.super.so/b27a22c8-1220-4332-8c7b-b84c768ca5d7/images/0bb9e52f-460b-4667-bc7b-c6a09bd64116/lor-network-filters.svg&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;256.32&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23805caa83f3aa54e1ab01&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://assets.super.so/b27a22c8-1220-4332-8c7b-b84c768ca5d7/images/19dca0ab-05f1-4329-87ce-f809f0c3b0d5/lor-network-read.svg&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;93.6&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23809c8b81d30662fed967&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://assets.super.so/b27a22c8-1220-4332-8c7b-b84c768ca5d7/images/c285dbe2-f0bb-44ec-90a8-1cbf3fa967a8/lor-network-write.svg&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;93.6&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380269306f80a9a46b670&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://assets.super.so/b27a22c8-1220-4332-8c7b-b84c768ca5d7/images/69361801-d04e-4131-9e4e-8e5c66d8c93b/lor-http-filters.svg&quot; alt=&quot;image&quot; width=&quot;768&quot; height=&quot;330.24&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380aa822bf4e68e234de7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://assets.super.so/b27a22c8-1220-4332-8c7b-b84c768ca5d7/images/77ac7329-3237-4aa5-879b-6eb182c5130c/lor-route-config.svg&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;340.3636363636363&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380b19dd7fbd7665f9fbb&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://assets.super.so/b27a22c8-1220-4332-8c7b-b84c768ca5d7/images/2861d0e8-5f31-4709-ac2a-c1c3f0244927/lor-lb.svg&quot; alt=&quot;image&quot; width=&quot;816&quot; height=&quot;364.48&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23801ea07bc1a7de94e9f2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1fcb8b2c1c238088acfcfcb4a74aa39a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Request flow&lt;/code&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/life_of_a_request#request-flow&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23803c94f0d8feb969c4c8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;A TCP connection from downstream is accepted by an Envoy&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/listeners/listeners#arch-overview-listeners&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;listener&lt;/a&gt;&amp;nbsp;running on a&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/intro/threading_model#arch-overview-threading&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;worker thread&lt;/a&gt;.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b490a0ed4fd110fd92&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;The&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/listeners/listener_filters#arch-overview-listener-filters&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;listener filter&lt;/a&gt;&amp;nbsp;chain is created and runs. It can provide SNI and other pre-TLS info. Once completed, the listener will match a network filter chain. Each listener may have multiple filter chains which match on some combination of destination IP CIDR range, SNI, ALPN, source ports, etc. A transport socket, in our case the TLS transport socket, is associated with this filter chain.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238076887eff6f0962c3ca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;On network reads, the&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/security/ssl#arch-overview-ssl&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;TLS&lt;/a&gt;&amp;nbsp;transport socket decrypts the data read from the TCP connection to a decrypted data stream for further processing.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380f38346cd0d730c92bb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;The&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/listeners/listener_filters#arch-overview-network-filters&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;network filter&lt;/a&gt;&amp;nbsp;chain is created and runs. The most important filter for HTTP is the HTTP connection manager, which is the last network filter in the chain.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380a8b847ef9cf93e46bc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;The HTTP/2 codec in&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http_connection_management#arch-overview-http-conn-man&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;HTTP connection manager&lt;/a&gt;&amp;nbsp;deframes and demultiplexes the decrypted data stream from the TLS connection to a number of independent streams. Each stream handles a single request and response.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380428108ec2ba5f0441b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;For each HTTP stream, an&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http_filters#arch-overview-http-filters&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Downstream HTTP filter&lt;/a&gt;&amp;nbsp;chain is created and runs. The request first passes through CustomFilter which may read and modify the request. The most important HTTP filter is the router filter which sits at the end of the HTTP filter chain. When&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;decodeHeaders&lt;/code&gt;&amp;nbsp;is invoked on the router filter, the route is selected and a cluster is picked. The request headers on the stream are forwarded to an upstream endpoint in that cluster. The&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http_routing#arch-overview-http-routing&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;router&lt;/a&gt;&amp;nbsp;filter obtains an HTTP&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/connection_pooling#arch-overview-conn-pool&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;connection pool&lt;/a&gt;&amp;nbsp;from the cluster manager for the matched cluster to do this.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238065be6cc8da956218ec&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Cluster specific&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/overview#arch-overview-load-balancing&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;load balancing&lt;/a&gt;&amp;nbsp;is performed to find an endpoint. The cluster&amp;rsquo;s circuit breakers are checked to determine if a new stream is allowed. A new connection to the endpoint is created if the endpoint&amp;rsquo;s connection pool is empty or lacks capacity.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238019a9f9f49276b22215&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;For each stream an&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http_filters#arch-overview-http-filters&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Upstream HTTP filter&lt;/a&gt;&amp;nbsp;chain is created and runs. By default this only includes the CodecFilter, sending data to the appropriate codec, but if the cluster is configured with an upstream HTTP filter chain, that filter chain will be created and run on each stream, which includes creating and running separate filter chains for retries and shadowed requests.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e18a00ec216de846a1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;The upstream endpoint connection&amp;rsquo;s HTTP/2 codec multiplexes and frames the request&amp;rsquo;s stream with any other streams going to that upstream over a single TCP connection.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380f49c09e70107fad392&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;The upstream endpoint connection&amp;rsquo;s TLS transport socket encrypts these bytes and writes them to a TCP socket for the upstream connection.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238014aad2ff4e6a735cdb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;The request, consisting of headers, and optional body and trailers, is proxied upstream, and the response is proxied downstream. The response passes through the HTTP filters in the&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http_filters#arch-overview-http-filters-ordering&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;opposite order&lt;/a&gt;&amp;nbsp;from the request, starting at the codec filter, traversing any upstream HTTP filters, then going through the router filter and passing through CustomFilter, before being sent downstream.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23801ebfddf06baf118ebe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;If independent half-close is enabled the stream is destroyed after both request and response are complete (END_STREAM for the HTTP/2 stream is observed in both directions) AND response has success (2xx) status code. Otherwise the stream is destroyed when the response is complete, even if the request has not yet completed. Post-request processing will update stats, write to the access log and finalize trace spans.&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380b7920cf2d8b0935b21&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380acb4dcd3c84f637e40&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : 필터 확장&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23800aa73befbbe9651d5a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 프록시의 강점 중 하나는 확장할 수 있게 만들어졌다는 점이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23805cb433c135ec24298c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 API를 설계하는 데 많은 고민과 주의가 반영됐으며, 다른 사람들이 작성한 확장 기능도 인기를 얻게 해준 큰 이유 중 하나다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23805a8b73d6654367b705&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이를 확장할 수 있는 주요 방법은 필터 확장이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238078be7ed0120eef3e72&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이를 확장할 수 있는 지점이 어디인지, 무엇이 애플리케이션에 가장 큰 이점을 주는지 이해하려면 먼저 엔보이의 아키텍처를 이해해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380e2bb85c94ea38a227a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23801d9b45da7aab4dff5a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;14.1.1 엔보이의 필터 체인 이해하기&lt;/u&gt;&lt;/span&gt; Understanding Envoy&amp;rsquo;s filter chaining&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238018b424d093946bb66f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;3장에서는 그림 14.1과 같이 엔보이의 개념인 리스너, 루트, 클러스터를 소개헀다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380ef89c4ec9e917f7f88&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이것들이 고수준 개념임을 강조했지만, 이번 장에서는 더 자세히 다루기로 약속한 바 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23809a8f19ee1fa0a753c5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서는 리스너와, 필터 및 필터 체인을 사용해 리스너 모델을 확장하는 방법에 중점을 둔다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238063ad3fdb49f07f5d04&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ad4b2424-39e5-4d1c-b049-a9e84e8eaa9d/CleanShot_2025-05-18_at_12.31.08/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ad4b2424-39e5-4d1c-b049-a9e84e8eaa9d/CleanShot_2025-05-18_at_12.31.08/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ad4b2424-39e5-4d1c-b049-a9e84e8eaa9d/CleanShot_2025-05-18_at_12.31.08/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;446.0141043723554&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23805cad19c3ce570c30fc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b5ba38e8f74a1b4e07&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;리스너&lt;/span&gt;는 네트워킹 인터페이스에 포트를 열고 들어오는 트래픽 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;수신&lt;/span&gt;을 시작하는 방법이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;A &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;listener&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; in Envoy is a way to open a port on a networking interface and start listening to incoming traffic.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b58903fd52a59e7271&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;궁극적으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네트워크 커넥션&lt;/span&gt;에서&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 바이트&lt;/span&gt;를 가져와 어떤 방식으로 처리하는 3계층과 4계층&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(L3/L4) 프록시&lt;/span&gt;다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Envoy is ultimately a layer 3 and layer 4 (L3/L4) proxy that takes bytes off a network connection and processes them in some way.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238091aabee1f7e5a9104b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이것이 아키텍처의 첫 번째 중요 부분인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터&lt;/span&gt;로 이어진다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This brings us to the first important part of the architecture: the filter.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c78422fc830688ef7e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;리스너는 네트워크 스트림에서 바이트를 읽어들인 후 그림 14.2와 같이 다양한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터&lt;/span&gt; 혹은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기능&lt;/span&gt; 단계들을 거쳐 처리한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;A listener reads bytes off the networking stream and processes them through various filters or stages of functionality.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380b4a1a2cdc7743dd479&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/72a155db-fa0d-4e02-8a8d-38f96f3d678b/CleanShot_2025-05-18_at_12.34.31/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/72a155db-fa0d-4e02-8a8d-38f96f3d678b/CleanShot_2025-05-18_at_12.34.31/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/72a155db-fa0d-4e02-8a8d-38f96f3d678b/CleanShot_2025-05-18_at_12.34.31/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;701.9744262695312&quot; height=&quot;398.98546450362244&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380afbe77e54f4cc8b7d1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23806aa940df9eb2214d65&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이에서 가장 기본적인 필터는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네트워크 필터&lt;/span&gt;로, 바이트 스트림에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인코딩/디코&lt;/span&gt;딩 작업을 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Envoy&amp;rsquo;s most basic filters are&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; network filters&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, which operate on a stream of bytes for either encoding or decoding.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d2a0eccb287a8b2676&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;스트림에서 필터가 둘 이상 순서대로 동작하도록 설정할 수 있는데, 이를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터 체인&lt;/span&gt;이라고 부른다. 필터 체인을 사용하면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프록시의 기능&lt;/span&gt;을 구현할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;You can configure more than one filter to operate on the stream in a sequence called a filter chain, and these chains can be used to implement the functionality of the proxy.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238042a902c5a500d90580&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어, 엔보이에는 대표적으로 다음과 같은 프로토콜용 네트워크 필터가 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;network filters for the following protocols&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380f3b665d70659e1d552&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;MongoDB&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380cea944cb6596d63c31&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Redis&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e58c05d11a081e5281&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Thrift&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23807bbc34e5767ae0049a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Kafka&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380999d36c8d7eca1a854&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;HTTP Connection Manager&lt;/code&gt; (HCM)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23806399c7d4ec8bf9feb3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238010a48ccad968cda3de&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;가장 많이 사용하는 네트워크 필터 중 하나가 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;HttpConnectionManager&lt;/code&gt; 이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23800ea6a6cd76bd143547&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 필터는 바이트 스트림을 HTTP 기반 프로토콜(즉, HTTP 1.1, HTTP 2, gRPC, 최근에는 HTTP 3 등)의 HTTP 헤더, 바디, 트레일러로 변환하는 것에 관한 세부 사항을 추상화하는 역할을 하며, 그림 14.3에서 볼 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This filter is responsible for abstracting away the details of converting a stream of bytes into HTTP headers, body, and trailers for HTTP-based protocols (that is, HTTP 1.1, HTTP 2, gRPC, and recently HTTP 3, and so on) and is shown in figure 14.3.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23805680cfdf8e3ae50429&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/05d8565c-e576-472f-9ff2-182154f4c145/CleanShot_2025-05-18_at_12.39.11/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/05d8565c-e576-472f-9ff2-182154f4c145/CleanShot_2025-05-18_at_12.39.11/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/05d8565c-e576-472f-9ff2-182154f4c145/CleanShot_2025-05-18_at_12.39.11/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;HCM은 바이트 스트림을 HTTP 요청으로 변환하고, 이를 헤더나 바디 세부 정보 같은 L7 속성을 바탕으로 라우팅&quot; width=&quot;912&quot; height=&quot;440.36213991769546&quot; data-nimg=&quot;1&quot; /&gt;HCM은 바이트 스트림을 HTTP 요청으로 변환하고, 이를 헤더나 바디 세부 정보 같은 L7 속성을 바탕으로 라우팅&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c238088a830ededf5054326&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238036a8b7f35f828aac42&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;HttpConnectionManager&lt;/code&gt; 는 HTTP 요청을 처리할 뿐 아니라 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;헤더&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;경로 접두사&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;path prefix&lt;/span&gt; 등 요청 속성을 바탕으로 한 요청 라우팅, 액세스 로깅, 헤더 조작도 처리한다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e397a1e5b74285a1c7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또 HCM에는 필터 기반 아키텍처가 있어 HTTP 요청에서 동작하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP 필터를 순서대로 또는 연쇄로 설정&lt;/span&gt;하거나 구축할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The HCM also has a filter-based architecture that allows you to build or configure HTTP filters into a sequence or chain of filters that operate on an HTTP request.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380148075ea04526b0eae&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본 HTTP 필터&lt;/span&gt;의 예시는 다음과 같다, 전체목록 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/http_filters&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238088a476f0e6c47a141f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Cross-origin resource sharing (CORS)&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380ee9579ec58968aa63c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Cross-site request forgery prevention (CSRF)&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380a193bfc59d43a3ac52&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ExternalAuth 외부 인증&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b4a1eac909749b26c5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;RateLimit 속도 제한&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238026b7fac267de4efd3b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Fault injection 결합 주입&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380679accfe892e2a5015&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;gRPC/JSON transcoding 트랜스코딩&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23804bbb44c1ac4a02efe5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Gzip&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23804d8937e7dff88332af&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Lua 루아&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23800da633f42f8ba478ba&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Role-based access control (RBAC) 역할 기반 접근 제어&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380e3baa3e373ffd24537&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Tap&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b892d4f1c905937d21&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Router 라우터&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23803eb376fed6369b4ee0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;WebAssembly (Wasm) 웹어셈블리&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380ad8a49e0f617277a05&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380daaf2ded5dfeced6c4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;HTTP 요청 하나에서 HTTP 필터가 순서대로 동작하도록 설정할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;HTTP filters can be configured in a sequence to operate on an HTTP request.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380ce9d05fbe577022171&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;HTTP 필터들은 요청을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;업스트림 클러스터로 보내는 터미널 필터로 끝나야 한다&lt;/span&gt;. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The HTTP filters &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;must&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; in a terminal filter that sends the request to an upstream cluster.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380c68bb8ebd5dc24d4d8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 담당하는 HTTP 필터는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;라우터 필터&lt;/span&gt;로 그림 14.14에 표시돼 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The HTTP filter responsible for this is the router filter, shown in figure 14.4.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23808fb837ebb7d1e3d219&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;라우터 필터는 요청을 적절한 업스트림 클러스터를 찾아 전달하며, 이때 타임아웃과 재시도 파라미터를 설정할 수 있다 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The router filter matches requests to upstream clusters with configurable timeout and retry parameters.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23800ca1c4f577d80c2c6b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/6ed26ee6-08ee-4f01-a694-a4fb27f42d25/CleanShot_2025-05-18_at_12.48.17/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/6ed26ee6-08ee-4f01-a694-a4fb27f42d25/CleanShot_2025-05-18_at_12.48.17/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/6ed26ee6-08ee-4f01-a694-a4fb27f42d25/CleanShot_2025-05-18_at_12.48.17/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;HCM 에는 HTTP 요청을 처리하는 필터 체인이 있으며, 라우팅 필터로 끝난다&quot; width=&quot;912&quot; height=&quot;266.14339622641506&quot; data-nimg=&quot;1&quot; /&gt;HCM 에는 HTTP 요청을 처리하는 필터 체인이 있으며, 라우팅 필터로 끝난다&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23806f9c5acf2568190641&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://www.anyflow.net/sw-engineer/istio-overview-4&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e2747b64-02b8-4906-b857-20cbbfed15d3/image/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e2747b64-02b8-4906-b857-20cbbfed15d3/image/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e2747b64-02b8-4906-b857-20cbbfed15d3/image/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;https://www.anyflow.net/sw-engineer/istio-overview-4&quot; width=&quot;912&quot; height=&quot;252.4921875&quot; data-nimg=&quot;1&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380618869d8ae9be46c67&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238006a634f5edffded149&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 사용자는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이의 핵심 코드를 변경하지 않고도&lt;/span&gt; 자신만의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터를 직접 작성하고 프록시 위에 얹어 계층화&lt;/span&gt;할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Users can also write their own filters and layer them on top of the proxy without having to change any of Envoy&amp;rsquo;s core code.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23804bbd14dac87e6b44f0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어, 이스티오의 프록시는 데이터 플레인용으로&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 엔보이 위에 필터를 추가해 커스텀 엔보이를 빌드&lt;/span&gt;한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;For example, Istio&amp;rsquo;s proxy adds filters on top of Envoy and builds a custom Envoy for its data plane.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23804589ccfc649d22f8cb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇지만 이렇게 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;커스텀 엔보이 프록시 빌드를 도입&lt;/span&gt;하면,&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 유지 보수할 것이 많아질 수 있고 개발자가 C++를 사용해&lt;/span&gt;야 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;However, this introduces a custom Envoy proxy build that can be a lot to maintain and require developers to use C++.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c23802f8760e59c4f9ffa3e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23806aba92c25ad5084e05&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;14.1.2 확장용 필터&lt;/u&gt;&lt;/span&gt; Filters intended for extension&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c238016bb82fcbad646e1a1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;자신만의 필터를 C++로 작성해 프록시에 내장할 수 있지만, 이와 관련된 내용은 이 책의 범위를 벗어난다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23803c8699fda17fdb5ddd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;필터 작성 등과 같이 엔보이 바이너리 자체에 &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;변경 사항을 컴파일하지 않고도 엔보이의 HTTP 기능을 확장&lt;/span&gt;&lt;/span&gt;하는 방법이 있는데, 이 경우 다음&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; HTTP 필터들&lt;/span&gt;을 사용한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;There are ways to extend Envoy&amp;rsquo;s HTTP capabilities, including writing filters, without compiling changes into the Envoy binary itself, by using the following HTTP filters:&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c23801da440c59561fa495d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;외부 처리&lt;/span&gt; External processing&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23809faf9cd010139f4e2d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;루아&lt;/span&gt; Lua&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380649b8dd0ed739e5536&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;웹어셈블리&lt;/span&gt; Wasm (WebAssembly)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238043b0e0e5066463c3d0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380cda42df91018d8c058&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 필터를 사용하면 외부 서비스를 호출하도록 설정하거나, 루아 스크립트를 실행하거나, 커스텀 코드를 실행해 HTTP 요청이나 응답을 처리할 때 HCM의 기능을 강화할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;With these filters, you can configure calls out to an external service, run a Lua script, or run custom code to enhance the capabilities of the HCM when processing HTTP requests or responses.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238043a169d427d049dff0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;외부 서비스를 호출해 처리하는 부분에 대해 이야기할 때는 속도 제한 필터를 중점을 두겠다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;For calling an external service for processing, we&amp;rsquo;ll focus on the rate-limiting filter.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380d3a228c6d759d150cf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 9장에서 다룬 것처럼 외부 인가를 요청할 수도 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238000b01adbd58949cabf&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1042.97px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1fcb8b2c1c23805485c4e0b46bfbce6a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;엔보이에는 범용 처리 목적으로 외부 서비스를 호출하기 위한 외부 처리 필터가 있다. 이 필터는 코드베이스에 존재하기는 하지만, 저술 시점에는 아무것도 하지 않는다. 우리는 전역 속도 제한 필터를 사용하는 등 외부 서비스를 호출하는 다른 방법에 초점을 맞춘다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c23808abbe2d9b0819880c6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fcb8b2c1c2380da8559ec82328ba72b&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;14.1.3 이스티오의 데이터 플레인 커스터마이징하기&lt;/u&gt;&lt;/span&gt; Customizing Istio&amp;rsquo;s data plane&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380879ce1f0cd579b71c5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 필터 아키텍처를 깊이 있게 이해한 것을 바탕으로, 이후 절들에서 다음 방법 중 하나를 사용해 엔보이 데이터 플레인의 기능을 확장한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380658687ca2a3280aafc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 HTTP 필터를 이스티오 API에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EnvoyFilter&lt;/span&gt; 리소스로 설정하기&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23802b81eaf0e61538e491&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;속도 제한&lt;/span&gt; 서버 RLS, &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Rate-Limit Server&lt;/span&gt; 호출하기&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c23803baebfe82a8d898f2c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;루아 스크립트&lt;/span&gt;를 구현해 루아 HTTP 필터에 불러오기&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238069b967c39f96520ece&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;웹어셈블리&lt;/span&gt; HTTP 필터용 웹어셈블리 모듈(&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Wasm 모듈&lt;/span&gt;) 구현하기&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238049a24cc3e0b4ed5a66&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fcb8b2c1c2380b2a9a3ef60414e26cc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 필터를 직접 설정하는 방법을 이해해야 하며, 이를 위해 이스티오의 EnvoyFilter 리소스를 사용할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1fcb8b2c1c238091acbdfff269c94e2e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이전 장들에서 이미 사용해봤지만, 여기서 더 자세히 살펴본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fcb8b2c1c238024835fe9ed2617c292&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1fcb8b2c1c2380bfb7e1f630eb3a7c28&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;14.2. EnvoyFilter 리소스로 엔보이 필터 설정하기&lt;/p&gt;
&lt;div id=&quot;block-1fdb8b2c1c238094b5e7dc6b12f9c908&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;[실습 환경 구성] &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;k8s(1.23.17) 배포&lt;/span&gt; &amp;amp; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;mypc 컨테이너&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fdb8b2c1c23809dbff3ea0526fb4c9e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
git clone https://github.com/AcornPublishing/istio-in-action
cd istio-in-action/book-source-code-master
pwd # 각자 자신의 pwd 경로
code .

# 아래 extramounts 생략 시, myk8s-control-plane 컨테이너 sh/bash 진입 후 직접 git clone 가능
kind create cluster --name myk8s --image kindest/node:v1.23.17 --config - &amp;lt;&amp;lt;EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000 # Sample Application (istio-ingrssgateway) HTTP
    hostPort: 30000
  - containerPort: 30001 # Prometheus
    hostPort: 30001
  - containerPort: 30002 # Grafana
    hostPort: 30002
  - containerPort: 30003 # Kiali
    hostPort: 30003
  - containerPort: 30004 # Tracing
    hostPort: 30004
  - containerPort: 30005 # Sample Application (istio-ingrssgateway) HTTPS
    hostPort: 30005
  - containerPort: 30006 # TCP Route
    hostPort: 30006
  - containerPort: 30007 # kube-ops-view
    hostPort: 30007
  extraMounts: # 해당 부분 생략 가능
  - hostPath: /Users/gasida/Downloads/istio-in-action/book-source-code-master # 각자 자신의 pwd 경로로 설정
    containerPath: /istiobook
networking:
  podSubnet: 10.10.0.0/16
  serviceSubnet: 10.200.0.0/22
EOF

# 설치 확인
docker ps

# 노드에 기본 툴 설치
docker exec -it myk8s-control-plane sh -c 'apt update &amp;amp;&amp;amp; apt install tree psmisc lsof wget bridge-utils net-tools dnsutils tcpdump ngrep iputils-ping git vim -y'

# (옵션) kube-ops-view
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30007 --set env.TZ=&quot;Asia/Seoul&quot; --namespace kube-system
kubectl get deploy,pod,svc,ep -n kube-system -l app.kubernetes.io/instance=kube-ops-view

## kube-ops-view 접속 URL 확인
open &quot;http://localhost:30007/#scale=1.5&quot;
open &quot;http://localhost:30007/#scale=1.3&quot;

# (옵션) metrics-server
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm install metrics-server metrics-server/metrics-server --set 'args[0]=--kubelet-insecure-tls' -n kube-system
kubectl get all -n kube-system -l app.kubernetes.io/instance=metrics-server
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380308d8bf2db9f966ef1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380ed8afcd401d6892f12&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kind docker network 에 테스트용 PC(실제로는 컨테이너) 배포&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380e98968e1166b155af2&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# kind 설치 시 kind 이름의 도커 브리지가 생성된다 : 172.18.0.0/16 대역
docker network ls
docker inspect kind

# mypc 컨테이너 기동 : kind 도커 브리지를 사용하고, 컨테이너 IP를 지정 없이 혹은 지정 해서 사용
docker run -d --rm --name mypc --network kind --ip 172.19.0.100 nicolaka/netshoot sleep infinity # IP 지정 실행 시
혹은 IP 지정 실행 시 에러 발생 시 아래 처럼 IP 지정 없이 실행
docker run -d --rm --name mypc --network kind nicolaka/netshoot sleep infinity # IP 지정 없이 실행 시
docker ps

# kind network 중 컨테이너(노드) IP(대역) 확인
docker ps -q | xargs docker inspect --format '{{.Name}} {{.NetworkSettings.Networks.kind.IPAddress}}'
/mypc 172.19.0.100
/myk8s-control-plane 172.19.0.2

# 동일한 docker network(kind) 내부에서 컨테이너 이름 기반 도메인 통신 가능 확인!
docker exec -it mypc ping -c 1 172.19.0.2
docker exec -it mypc ping -c 1 myk8s-control-plane
docker exec -it myk8s-control-plane ping -c 1 mypc
64 bytes from mypc.kind (fc00:f853:ccd:e793::3): icmp_seq=1 ttl=64 time=0.080 ms

--- mypc ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.080/0.080/0.080/0.000 ms&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c23806382e1d2ad841ca327&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380a697cdc60992bcef3f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;[실습 환경 구성]&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; (편리성 설정) MetalLB 배포&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23803480d1cd808f8f5d22&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;MetalLB 배포&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380a18a01e76d68f4e164&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# MetalLB 배포
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.9/config/manifests/metallb-native.yaml

# 확인
kubectl get crd  
kubectl get pod -n metallb-system

# IPAddressPool, L2Advertisement 설정 : MetalLB 파드(speaker) 배포 정상 완료 후 아래 설정 실행하자.
cat &amp;lt;&amp;lt; EOF | kubectl apply -f -
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default
  namespace: metallb-system
spec:
  addresses:
  - 172.19.255.101-172.19.255.120
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: default
  namespace: metallb-system
spec:
  ipAddressPools:
  - default
EOF

# 확인
kubectl get IPAddressPool,L2Advertisement -A

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380b5b7a0c48c8000c2f6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380e3a97fc3d63560c563&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;샘플 애플리케이션 배포 후 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23803789fbf617abb50290&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
cat &amp;lt;&amp;lt; EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
  type: LoadBalancer
EOF


# 확인
kubectl get deploy,pod,svc,ep 
kubectl get svc nginx-service -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
LBIP=$(kubectl get svc nginx-service -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

# 외부?에서 각 클러스터의 Service(LB)로 접속(인입) 확인 : TCP 80 포트 사용으로 편리하다!
docker exec -it mypc curl -s $LBIP
docker exec -it mypc curl -s $LBIP -v -I


# 확인 후 삭제
kubectl delete deploy,svc --all
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238035a99ddedd75b83643&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380b1b599d6e34c4329db&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;[실습 환경 구성] &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio 1.17.8 설치&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/setup/install/istioctl/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Install&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/setup/additional-setup/config-profiles/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;profile&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1fdb8b2c1c23808abd0bd865c22aa156&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# myk8s-control-plane 진입 후 설치 진행
docker exec -it myk8s-control-plane bash
-----------------------------------
# (옵션) 코드 파일들 마운트 확인
tree /istiobook/ -L 1
혹은
git clone ... /istiobook

# istioctl 설치
export ISTIOV=1.17.8
echo 'export ISTIOV=1.17.8' &amp;gt;&amp;gt; /root/.bashrc

curl -s -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIOV sh -
cp istio-$ISTIOV/bin/istioctl /usr/local/bin/istioctl

# demo 프로파일 컨트롤 플레인 배포
istioctl install --set profile=demo --set values.global.proxy.privileged=true -y

# 보조 도구 설치
kubectl apply -f istio-$ISTIOV/samples/addons

# 빠져나오기
exit
-----------------------------------

# 설치 확인 : istiod, istio-ingressgateway, crd 등
kubectl get istiooperators -n istio-system -o yaml
kubectl get all,svc,ep,sa,cm,secret,pdb -n istio-system
kubectl get cm -n istio-system istio -o yaml
kubectl get crd | grep istio.io | sort

# 실습을 위한 네임스페이스 설정
kubectl create ns istioinaction
kubectl label namespace istioinaction istio-injection=enabled
kubectl get ns --show-labels

# istio-ingressgateway 서비스 : nodeport 지정 변경 , externalTrafficPolicy 설정 (ClientIP 수집)
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;LoadBalancer&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 8080, &quot;nodePort&quot;: 30000}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;LoadBalancer&quot;, &quot;ports&quot;: [{&quot;port&quot;: 443, &quot;targetPort&quot;: 8443, &quot;nodePort&quot;: 30005}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;:{&quot;externalTrafficPolicy&quot;: &quot;Local&quot;}}'
kubectl describe svc -n istio-system istio-ingressgateway

# NodePort 변경 및 nodeport 30001~30003으로 변경 : prometheus(30001), grafana(30002), kiali(30003), tracing(30004)
kubectl patch svc -n istio-system prometheus -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 9090, &quot;targetPort&quot;: 9090, &quot;nodePort&quot;: 30001}]}}'
kubectl patch svc -n istio-system grafana -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 3000, &quot;targetPort&quot;: 3000, &quot;nodePort&quot;: 30002}]}}'
kubectl patch svc -n istio-system kiali -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 20001, &quot;targetPort&quot;: 20001, &quot;nodePort&quot;: 30003}]}}'
kubectl patch svc -n istio-system tracing -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 16686, &quot;nodePort&quot;: 30004}]}}'

# Prometheus 접속 : envoy, istio 메트릭 확인
open http://127.0.0.1:30001

# Grafana 접속
open http://127.0.0.1:30002

# Kiali 접속 : NodePort
open http://127.0.0.1:30003

# tracing 접속 : 예거 트레이싱 대시보드
open http://127.0.0.1:30004
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238077b05af485a2944e88&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380e292d5c0586f38213f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;tap 필터&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습~)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23801a8371e5032d22f81f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 데이터 플레인을 확장하는 첫 번째 단계는 엔보이의 기존 필터가 우리가 찾고 있는 확장 유형을 달성하는 데 충분하지 파악하는 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The first step in extending Istio&amp;rsquo;s data plane is to figure out whether an existing filter in Envoy is sufficient to accomplish the type of extension we&amp;rsquo;re looking for.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238076942fe4ccc109a0b5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터가 존재&lt;/span&gt;하는 경우, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EnvoyFilter&lt;/span&gt; 리소스를 사용해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오의 데이터 플레인을 직접 설정&lt;/span&gt;할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;If one exists, we can use the EnvoyFilter resource to directly configure Istio&amp;rsquo;s data plane.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23804f9284d8ae9d05f582&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238029aa4ffe1ee6fdee27&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오의 API&lt;/span&gt;는 일반적으로 특정 네트워크나 보안 시나리오에 초점을 맞춰 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기저 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;underlying&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 엔보이&lt;/span&gt;의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;설정을 추상&lt;/span&gt;화한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio&amp;rsquo;s APIs&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; generally &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;abstract&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; away the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;underlying&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Envoy&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; configuration, focusing on specific networking or security scenarios.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23800482b9c6511d855ba8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;VirtualService, DestinationRule, and AuthorizationPolicy 같은 리소스는 모두 결국 엔보이 설정으로 변환되며, 필터 체인에서 특정 HTTP 필터를 설정하기도 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Resources like VirtualService, DestinationRule, and AuthorizationPolicy all end up getting translated to an Envoy configuration and potentially configure specific HTTP filters in a filter chain.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23802f80fbd01dc5a41a83&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 기저 엔보이에서 할 수 있는 모든 필터나 설정을 노출하려고 시도하지 않으며, 따라서 엔보이를 직접 설정해야 하는 상황이 있을 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Istio does not try to expose every possible filter or configuration for the underlying Envoy proxy, and there may be cases where we need to configure Envoy directly.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238042a6c9dd70c238bc77&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오의 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;EnvoyFilter&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 리소스는 이스티오의 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;고수준 API에서 노출하지 않는 엔보이&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;의 일부를 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;설정&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;하거나 조정해야 하는 고급 사용 사례를 위한 것&lt;/span&gt;&lt;/span&gt;이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Istio&amp;rsquo;s EnvoyFilter resource is intended for advanced use cases where a user needs to either tweak or configure a portion of Envoy not exposed by Istio&amp;rsquo;s higher-level APIs.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380b7b897eb2ac5107fa4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;리소스는 엔보이의 거의 모든 것을 설정&lt;/span&gt;할 수 있으며(일부 제한 있음) 리스너, 루트, 클러스터, 필터가 포함된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This resource can configure just about anything (with some limitations) in Envoy, including listeners, routes, clusters, and filters.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380969e93f17923ce9142&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238004a9d5f5c9968e5e1e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;EnvoyFilter 리소스는 이스티오의 고급 사용자용이며 비상 수단이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The EnvoyFilter resource is intended for advanced usage of Istio and is a 'break glass' solution.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23800c9575f3718d114f94&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기저 엔보이 API는 이스티오 버전 간에 언제든 달라질 수 있으니, 배포하는 모든 &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;EnvoyFilter 의 유효성을 반드시 확인&lt;/span&gt;해야 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The underlying Envoy API may change at any time between releases of Istio, so be sure to validate any EnvoyFilter you deploy.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23806e8fd2fca533dea0ef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이전 버전과의 호환성은 어떤 것도 가정해서는 안 된다. 이 &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;API를 잘못 설정하면&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; 이스티오 데이터 플레인 전체가 멈출 수도 있다&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Do not assume any backward compatibility here. Bad configuration with this API can potentially take down the entire Istio data plane.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c238019b737c7adf465461d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23807cbcecd180ba8125e0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예제를 보고 어떻게 작동하는지 이해해보자. 사용할 서비스를 배포하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c238097ad4fd7e431489c4d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;mel&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl get envoyfilter -A
NAMESPACE      NAME                    AGE
istio-system   stats-filter-1.13       12m
istio-system   stats-filter-1.14       12m
istio-system   stats-filter-1.15       12m
istio-system   stats-filter-1.16       12m
istio-system   stats-filter-1.17       12m
istio-system   tcp-stats-filter-1.13   12m
istio-system   tcp-stats-filter-1.14   12m
istio-system   tcp-stats-filter-1.15   12m
istio-system   tcp-stats-filter-1.16   12m
istio-system   tcp-stats-filter-1.17   12m

# 배포
kubectl apply -f services/catalog/kubernetes/catalog.yaml -n istioinaction
kubectl apply -f services/webapp/kubernetes/webapp.yaml -n istioinaction
kubectl apply -f services/webapp/istio/webapp-catalog-gw-vs.yaml -n istioinaction
kubectl apply -f ch9/sleep.yaml -n istioinaction

# 확인
kubectl get gw,vs,dr -n istioinaction
NAME                                            AGE
gateway.networking.istio.io/coolstore-gateway   3s

NAME                                                       GATEWAYS                HOSTS                         AGE
virtualservice.networking.istio.io/webapp-virtualservice   [&quot;coolstore-gateway&quot;]   [&quot;webapp.istioinaction.io&quot;]   3s


# 호출 확인 : mypc
EXT_IP=$(kubectl -n istio-system get svc istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
docker exec -it mypc curl -s -H &quot;Host: webapp.istioinaction.io&quot; http://$EXT_IP
docker exec -it mypc curl -s -H &quot;Host: webapp.istioinaction.io&quot; http://$EXT_IP/api/catalog
[{&quot;id&quot;:1,&quot;color&quot;:&quot;amber&quot;,&quot;department&quot;:&quot;Eyewear&quot;,&quot;name&quot;:&quot;Elinor Glasses&quot;,&quot;price&quot;:&quot;282.00&quot;},{&quot;id&quot;:2,&quot;color&quot;:&quot;cyan&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Atlas Shirt&quot;,&quot;price&quot;:&quot;127.00&quot;},{&quot;id&quot;:3,&quot;color&quot;:&quot;teal&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Small Metal Shoes&quot;,&quot;price&quot;:&quot;232.00&quot;},{&quot;id&quot;:4,&quot;color&quot;:&quot;red&quot;,&quot;department&quot;:&quot;Watches&quot;,&quot;name&quot;:&quot;Red Dragon Watch&quot;,&quot;price&quot;:&quot;232.00&quot;}]

# 신규 터미널 : mypc 에서 반복 접속 
EXT_IP=$(kubectl -n istio-system get svc istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
while true; do docker exec -it mypc curl -s -H &quot;Host: webapp.istioinaction.io&quot; http://$EXT_IP/api/catalog ; echo ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done

# 호출 확인 : 자신의 호스트 PC
curl -s http://webapp.istioinaction.io:30000
curl -s http://webapp.istioinaction.io:30000/api/catalog
 &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380dea256d73d9fd4d0e9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380e7b8dacba16a5fb630&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;webapp 서비스를 거쳐 흐르는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;특정 요청을 디버깅&lt;/span&gt;할 도구로 데이터 플레인을 확장하고 싶다고 하자. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Suppose we want to extend our data plane with tooling to debug certain requests that flow through the webapp service.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380b7a50fd19d9f16c836&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이를 커스텀 필터로 확장할 수도 있지만, 충분히 살펴보니 이런 기능을 위한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;tap 필터&lt;/span&gt;가 있음을 발견했다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;We can extend Envoy with some custom filters, but if we look thoroughly enough, we see that a &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Tap filter&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; exists for this type of functionality.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380aaae3ff072cd6b763d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 API가 이 필터를 노출하고 있지는 않으므로, webapp 서비스에 이 필터를 설정하려면 EnvoyFilter 리소스를 사용하면 된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;It is not exposed by Istio&amp;rsquo;s APIs, so we can use the EnvoyFilter resource to configure this filter for our webapp service.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23801f8e09c9dc19767272&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238079bdeff355e27ad591&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;EnvoyFilter 리소스에 대해 알아야 할 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;첫 번째 사항&lt;/span&gt;은, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;달리 지정하지 않은 한 네임스페이스의 모든 워크로드에 적용&lt;/span&gt;된다는 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The first thing to know about an EnvoyFilter resource is that it applies to all workloads in the namespace for which it is declared, unless you specify otherwise.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380089750e47c327c9f0e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio-system 네임스페이스에 EnvoyFilter 리소스를 만들었다면 메시의 모든 워크로드에 적용&lt;/span&gt;된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;If you create an EnvoyFilter resource in the istio-system namespace, it will be applied to all workloads in the mesh.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238042b9b7ee804ef2d9ef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네임스페이스 내에서 커스텀 EnvoyFilter 설정을 적용할 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드를 좀 더 특정&lt;/span&gt;하고 싶다면, 예제에서 보겠지만 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;workloadSelector&lt;/span&gt;&lt;/code&gt; 를 사용하면 된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;If you want to be more specific about the workloads in a namespace to which the custom EnvoyFilter configuration applies, you can use a workloadSelector, as we&amp;rsquo;ll see in our example.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c238088a6a0c288e365444a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380b2b141fb20a247dc76&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;EnvoyFilter 리소스에 대해 알아야 할 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;두 번째 사항&lt;/span&gt;은, 다른 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오 리소스가 모두 변환되고 설정된 후에야 적용&lt;/span&gt;된다는 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The second thing to know about an EnvoyFilter resource is that it applies &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;after&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; all other Istio resources have been &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;translated&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; and &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;configured&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380f482fbe87a77357502&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VirtualService&lt;/span&gt; or &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DestinationRule&lt;/span&gt; 리소스가 있다면, 이 설정들이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;먼저 데이터 플레인에 적용&lt;/span&gt;된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;For example, if you have VirtualService or DestinationRule resources, those configurations are applied to the data plane first.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23809ea0b4de5c3d25a50e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380f3bc9ad436606ce30b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;마지막&lt;/span&gt;으로, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EnvoyFilter 리소스로 워크로드를 설정할 때 각별히 주의&lt;/span&gt;해야 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Finally, you should take great care when configuring a workload with the Envoy Filter resource.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23808a9424f94fdf51b852&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서 엔보이 명명 규칙과 설정 세부 사항을 잘 알아두자. 이는 정말&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 이스티오 API의 고급 사용법으로, 잘못 설정하면 메시를 마비&lt;/span&gt;&lt;/span&gt;시킬 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;You should be familiar with Envoy naming conventions and configuration specifics. This really is an advanced usage of Istio&amp;rsquo;s API and can bring down your mesh if misconfigured.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c238060b347ceb70ea4c590&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380d4b030e2eb5f46e828&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 예제에서는 그림 14.5와 같이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;webapp 워크로드의 데이터 플레인을 거치는 메시지&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;샘플링하도록 엔보이의 tap 필터를 설정&lt;/span&gt;하려고 한다 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/v1.18.2/configuration/http/http_filters/tap_filter&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;In our example, we want to configure Envoy&amp;rsquo;s tap filter to sample messages that go over the data plane for the webapp workload, as shown in figure 14.5.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380649cbedc53a0bde984&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청이나 응답이&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; tap 필터&lt;/span&gt;를 지나 흐를 때마다 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;tap 필터&lt;/span&gt;는 그 요청/응답을 어떤 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;수신 에이전트로 스트리밍&lt;/span&gt;한다. 이 예제에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;콘솔/CLI&lt;/span&gt;로 스트리밍한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Every time a request or response flows over the tap filter, it streams it out to some listening agent. In this example, we stream it out to the console/CLI.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c238093a922da0d8824c540&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c9bc97d5-af4b-4e1b-a124-b1f66afb8a6f/CleanShot_2025-05-18_at_14.19.07/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c9bc97d5-af4b-4e1b-a124-b1f66afb8a6f/CleanShot_2025-05-18_at_14.19.07/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c9bc97d5-af4b-4e1b-a124-b1f66afb8a6f/CleanShot_2025-05-18_at_14.19.07/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;720&quot; height=&quot;513.7748344370862&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380d4823ae1ea5680e75b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23803fbc07c764a561a1fa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;EnvoyFilter 리소스는 다음과 같다&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23807eaa88e93798caa242&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cat ch14/tap-envoy-filter.yaml
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: tap-filter
  namespace: istioinaction
spec:
  workloadSelector:
    labels:
      app: webapp # 워크로드 셀렉터
  configPatches:
  - applyTo: HTTP_FILTER # 설정할 위치
    match:
      context: SIDECAR_INBOUND
      listener:
        portNumber: 8080
        filterChain:
          filter:
            name: &quot;envoy.filters.network.http_connection_manager&quot; # HCM설정
            subFilter:
              name: &quot;envoy.filters.http.router&quot; # tap 필터를 이 router 필터 바로 앞에 배치하기 위함
    patch: # 엔보이 설정 패치
      operation: INSERT_BEFORE
      value:
       name: envoy.filters.http.tap
       typed_config:
          &quot;@type&quot;: &quot;type.googleapis.com/envoy.extensions.filters.http.tap.v3.Tap&quot;
          commonConfig:
            adminConfig:
              configId: tap_config&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238049a28ac77cdb3f49f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;EnvoyFilter 를 istioinaction 네임스페이스에 배포했다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238066a477ec212f4a91e9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;workloadSelector&lt;/span&gt;를 사용해 이 설정을 적용할 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드를 구체적으로 지정&lt;/span&gt;했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380528332da356ee6262b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음으로 엔보이 설정에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;패치할 위치&lt;/span&gt;를 지정해야 한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238051845cde9dced27fdc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 예제에서는 인바운드 리스너(SIDECAR_INBOUDN)의 HTTP_FILTER가 되도록 지정했다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238083bdb8ddffe072f3d4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞서 언근한 바와 같이 리스너를 위한 네트워크 필터들이 있으며, 그중 하나가 HCM 이다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238065a217e2200a4db10b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;HCM에도 HTTP 요청을 처리하는 HTTP용 필터 체인이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380f4bf59e140920f183f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 이 예제에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;특정 리스너도 지정&lt;/span&gt;했는데, HCM을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8080&lt;/span&gt; 포트에 바인딩된 리스너를 지정했다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380f9a01af300ee58af2e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마지막으로, 이 HCM HTTP 필터 체인에서 envoy.filters.http.&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;router&lt;/span&gt; HTTP 필터를 골랐다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380e6b2bdcf46b1c5fbe6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 필터를 고른 이유는, 다음 절에서 보겠지만 새로운&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; tap 필터&lt;/span&gt;를 이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;router 필터 바로 앞에 배치&lt;/span&gt;할 것이기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1fdb8b2c1c23803b929bd552341b4ef8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;EnvoyFilter 리소스의 patch 부분에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;설정을 어떻게 패치&lt;/span&gt;할지 지정한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380f4aa29c703fc44a259&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;여기서는 앞서 설정 부분에서 선택한 필터 앞에 설정을 병합한다. &amp;rarr; 앞서 router filter를 선택&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23804383f9dc20bfb44fb4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;추가하는 필터인 envoy_filters.http.tap 은 HCM 필터 체인에서 envoy.filters.http.router 앞에 위치한다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380c899eee1266ded7497&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;tap 필터 설정의 구조를 명확하게 해야 하므로 명시적인 타입을 지정한다 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/v1.18.2/configuration/http/http_filters/tap_filter#config-http-filters-tap-admin-handler&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380288f5ede24ba7da411&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23809298f8c2060f1e312e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 EnvoyFilter를 istioinaction 네임스페이스에 webapp 워크로드에 적용하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380439e77f4a9b5b6558b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;mel&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
cat ch14/tap-envoy-filter.yaml
kubectl apply -f ch14/tap-envoy-filter.yaml
kubectl get envoyfilter -n istioinaction
NAME         AGE
tap-filter   10s

#
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/webapp.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/webapp.istioinaction --port 15006
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/webapp.istioinaction --port 15006 -o json
...
                                {
                                    &quot;name&quot;: &quot;envoy.filters.http.tap&quot;,
                                    &quot;typedConfig&quot;: {
                                        &quot;@type&quot;: &quot;type.googleapis.com/envoy.extensions.filters.http.tap.v3.Tap&quot;,
                                        &quot;commonConfig&quot;: {
                                            &quot;adminConfig&quot;: {
                                                &quot;configId&quot;: &quot;tap_config&quot;
                                            }
                                        }
                                    }
                                },
                                {
                                    &quot;name&quot;: &quot;envoy.filters.http.router&quot;,
                                    &quot;typedConfig&quot;: {
                                        &quot;@type&quot;: &quot;type.googleapis.com/envoy.extensions.filters.http.router.v3.Router&quot;
                                    }
                                }
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c23803f9ef0d9226b6f5094&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23808eb083d5078d047ae6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;tap 기능이 동작하는지 확인해보자. 2개의 터미널 창이 필요한다. 창 하나에서는 curl 로 tap 설정을 전달해 webapp 워크로드에서 tap을 시작하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380918587fd48df752cf3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;bash&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 터미널 1 : 포트 포워딩 설정 후 tap 시작
kubectl port-forward -n istioinaction deploy/webapp 15000 &amp;amp;
curl -X POST -d @./ch14/tap-config.json localhost:15000/tap

# 터미널 2 : 기존 반복 접속하는 것 활용
EXT_IP=$(kubectl -n istio-system get svc istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
docker exec -it mypc curl -s -H &quot;Host: webapp.istioinaction.io&quot; http://$EXT_IP/api/catalog
docker exec -it mypc curl -s -H &quot;x-app-tap: true&quot; -H &quot;Host: webapp.istioinaction.io&quot; http://$EXT_IP/api/catalog
while true; do docker exec -it mypc curl -s -H &quot;x-app-tap: true&quot; -H &quot;Host: webapp.istioinaction.io&quot; http://$EXT_IP/api/catalog ; echo ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done

# 터미널 3 : 로그 확인
docker exec -it myk8s-control-plane istioctl proxy-config log deploy/webapp -n istioinaction --level http:debug
docker exec -it myk8s-control-plane istioctl proxy-config log deploy/webapp -n istioinaction --level tap:debug
kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f
2025-05-24T15:25:22.271550Z     debug   envoy http external/envoy/source/common/http/conn_manager_impl.cc:329   [C1314] new stream      thread=31
2025-05-24T15:25:22.271571Z     debug   envoy http external/envoy/source/common/http/conn_manager_impl.cc:1049  [C1314][S8779601432379246889] request headers complete (end_stream=true):
':authority', 'catalog.istioinaction:80'
':path', '/items'
':method', 'GET'
'user-agent', 'beegoServer'
'x-app-tap', 'true'
'x-b3-parentspanid', '7e508d9e9fdd4e95'
'x-b3-sampled', '1'
'x-b3-spanid', 'dd0331e4b59e09cc'
'x-b3-traceid', '1b7de837e06330fa7e508d9e9fdd4e95'
'x-envoy-attempt-count', '1'
'x-envoy-internal', 'true'
'x-forwarded-client-cert', 'By=spiffe://cluster.local/ns/istioinaction/sa/webapp;Hash=afae77b57f556ba074d972d1ff0bb0cf1a01c5f0e64fdd4c46acebbe574c92c8;Subject=&quot;&quot;;URI=spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account'
'x-forwarded-for', '172.19.0.100'
'x-forwarded-proto', 'http'
'x-request-id', '6ad55c18-93b6-9196-971d-dfd885c71a61'
'accept-encoding', 'gzip'
        thread=31
2025-05-24T15:25:22.271572Z     debug   envoy http external/envoy/source/common/http/conn_manager_impl.cc:1032  [C1314][S8779601432379246889] request end stream        thread=31
2025-05-24T15:25:22.272674Z     debug   envoy http external/envoy/source/common/http/conn_manager_impl.cc:1687  [C1314][S8779601432379246889] encoding headers via codec (end_stream=false):
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23804faab9d48c13e5fa12&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;tap 을 시작한 창에 tap 출력이 표시돼야 한다. 이 출력은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;헤더, 바디, 트레일러 &lt;/span&gt;등 요청에 대한 모드 정보를 준다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23808482d9f32b29c1edc8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380109559df8f7c1f787b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 tap 필터와 이 필터를 이스티오에서 사용해 네트워크 전반의 요청을 디버깅하는 방법을 계속해서 알아보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c238082888ce3efea210797&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c23801a98bed27062ad4798&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1fdb8b2c1c2380d081dbf0cf87591afb&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;14.3. 외부 호출로 요청 속도 제한하기(= 요청 빈도 제한하기)&lt;/p&gt;
&lt;div id=&quot;block-1fdb8b2c1c238040b990d51453ad1dd6&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : 속도 제한 소개 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/tasks/policy-enforcement/rate-limit/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Rate-limiting requests with external call-out&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380ea8e02e345bda7e877&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞 절에서는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 기본 HTTP 필터에 있는 기능&lt;/span&gt;으로 이스티오 데이터 플레인을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;확장&lt;/span&gt;해봤는데, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;외부 호출 기능&lt;/span&gt;으로&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 데이터 플레인을 확장하는 기본 필터들&lt;/span&gt;도 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;In the previous section, we extended the Istio data plane with functionality that exists in an out-of-the-box HTTP filter. There are also out-of-the-box filters that enhance the data plane with functionality that exists as a call-out.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380a4a919cdd786d8f995&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;우리는 이 필터들을 사용해 외부 서비스를 호출하고, 요청을 계속할지 여부나 방법을 결정할 수 있는 어떤 기능을 수행하게 해본다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;With these filters, we call out to an external service and have it perform some functionality that can determine how or whether to continue with a request. &lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238099aa0bfef8e7126d06&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 절에서는 특정 워크로드에서 서비스 측 속도 제한을 적용하기 위해 속도 제한 서비스를 호출하도록 이스티오 데이터 플레인을 설정하는 방법을 살펴본다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;In this section, we explore how to configure Istio&amp;rsquo;s data plane to call out to a rate-limiting service to enforce service-side rate-limiting for a particular workload&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23800db629f012f0191231&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/12b7bc75-aac3-4681-939f-cd028d232446/CleanShot_2025-05-18_at_15.13.00/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/12b7bc75-aac3-4681-939f-cd028d232446/CleanShot_2025-05-18_at_15.13.00/w=828,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/12b7bc75-aac3-4681-939f-cd028d232446/CleanShot_2025-05-18_at_15.13.00/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;동일한 서비스의 여러 복제본은 특정 서비스에 대한 글로벌 제한 속도를 받기 위해 동일한 속도 제한 서비스를 호출한다.&quot; width=&quot;816&quot; height=&quot;311.168&quot; data-nimg=&quot;1&quot; /&gt;동일한 서비스의 여러 복제본은 특정 서비스에 대한 글로벌 제한 속도를 받기 위해 동일한 속도 제한 서비스를 호출한다.&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c23808cbeacd83f9648e212&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380668751ea9c7dbe7c7a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 데이터 플레인에 엔보이를 사용하는 것처럼, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;속도 제한에 대한 특정 호출&lt;/span&gt;은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 HTTP 필터&lt;/span&gt;에서 나온다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Just as Istio uses Envoy for the data plane, the specific call-out for rate limiting comes from an Envoy HTTP filter.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380568844fd5776521bda&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이에서 속도 제한을 하는 방법은 여러 가지가 있지만 (네트워크 필터, 로컬 속도 제한, 글로벌 속도 제한), 우리는 특히 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;글로벌 속도 제한&lt;/span&gt; 기능을 살펴본다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;There are several ways to do rate limiting in Envoy (as a network filter, local rate limiting, and global rate limiting), but we specifically explore the global rate-limiting functionality.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238024af24dc50c3d0af79&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;글로벌 속도 제한을 사용하면 특정 워크로드의 모든 엔보이 프록시가 동일한 속도 제한 서비스를 호출하며, 이 속도 제한 서비스는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;백엔드 글로벌 키-값 저장소(= Redis)&lt;/span&gt;를 호출한다. (그림 14.7 참조) &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;With global rate limiting, you have all Envoy proxies for a particular workload calling the same rate-limiting service, which calls a backend global key-value store as shown in figure 14.7.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380bd9079cecfece4bc22&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 아키텍처를 사용하면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스의 복제본 개수에 상관없이 속도 제한이 적용&lt;/span&gt;되도록 할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;With this architecture, we can ensure that a rate limit is enforced regardless of how many replicas of a service exist.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23801fb2d6f408154e0f7d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e8dbbc98-10e1-4abd-a9ec-5c99646f4241/CleanShot_2025-05-18_at_15.18.16/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e8dbbc98-10e1-4abd-a9ec-5c99646f4241/CleanShot_2025-05-18_at_15.18.16/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e8dbbc98-10e1-4abd-a9ec-5c99646f4241/CleanShot_2025-05-18_at_15.18.16/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;612.96875&quot; height=&quot;408.9791496737358&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380cb818dfa896e70c3bc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 전역 속도 제한을 사용하면 속도 제한 서버를 호출해 특정 요청에 속도 제한을 적용해야 하는지 여부를 결정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23806c8e30c3d1d3b321a4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;결정을 내리고자 요청 속성을 속도 제한 서버로 전송한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380299de2ed5d2a57e761&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23809fa7c4e68bc724e526&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;속도 제한을 하려면 엔보이 커뮤니티에서 제공하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;속도 제한 서&lt;/span&gt;버를 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/envoyproxy/ratelimit&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Github&lt;/a&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;배포&lt;/span&gt;하거나, 더 정확히는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 속도 제한 API &lt;/span&gt;- &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/envoyproxy/envoy/blob/main/api/envoy/service/ratelimit/v3/rls.proto&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Code&lt;/a&gt; 를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;구현&lt;/span&gt;하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;속도 제한 서버를 배포&lt;/span&gt;해야 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;To configure rate limiting, we need to deploy the rate-limit server, which comes from the Envoy community or, more accurately, a rate-limit server that implements the Envoy rate-limiting API.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380e3ba0ecb11d3e5c88f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 서버는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;백엔드 레디스 캐시와 통신&lt;/span&gt;하도록 설정돼 있으며, 레디스에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;속도 제한 카운터를 저장&lt;/span&gt;한다 (원한다면 Memcached 를 사용할 수 있다). &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This server is configured to talk with a backend Redis cache and stores rate-limit counters in Redis (optionally, you can use Memcache).&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380e68c96ec1d21893c9d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서 속도 제한 서버를 배포하기 전에 기대하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;속도 제한 동작으로 설정&lt;/span&gt;해야 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Before we deploy the rate-limit server, we need to configure it with the expected rate-limiting behavior.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380af9eb7d60920453707&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23800ca6affd346faa5b5a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;14.3.1 엔보이 속도 제한 이해하기&lt;/u&gt;&lt;/span&gt; Understanding Envoy rate limiting(= 요청 빈도 제한)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c238033b75deb08cf4cc31c&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380c2a957d2dc2906f179&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;속도 제한 서버&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RLS(= rate limit server)&lt;/span&gt; 를 구성하기 전에 속도 제한이 어떻게 작동하는지 이해해야 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Before configuring the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Envoy rate-limit server &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;(&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RLS&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;), we need to understand how rate limiting works.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380dc91caf8ec84252d7b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;특히 엔보이의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP 전역 속도 제한&lt;/span&gt;을 살펴볼 것인데, 이 속도 제한은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP 필터&lt;/span&gt;로 존재하고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HCM&lt;/span&gt;에서 HTTP 필터 체인으로 설정해야 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;We are specifically looking at understanding Envoy&amp;rsquo;s HTTP global rate limiting, which exists as an HTTP filter and needs to be configured into the HTTP filter chain on the HCM.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380b48ea4cedf5208f36f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;속도 제한 필터는 HTTP 요청을 처리할 때 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청에서 특정 속성&lt;/span&gt;을 가져오고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RLS&lt;/span&gt;로 보내 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;평가&lt;/span&gt;를 받는다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;When the rate-limit filter processes an HTTP request, it takes certain attributes from the request and sends them out to the RLS for evaluation.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380bcb959ef9aae3e4be6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 속도 제한에서 이런 속성들 혹은 속성 그룹들을 가리켜 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;디스크립터&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;descripter&lt;/span&gt; 라고 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Envoy rate-limiting terminology uses the word &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;descriptors&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; to refer to attributes or groups of attributes.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238095ae88cb5410c31e43&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청이 디스크립터 또는 속성은 원격 주소일 수도, 요청 헤더일 수도, 목적지일 수도, 혹은 요청의 어떤 일반 속성 같은 것일 수도 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;These descriptors, or attributes, of the request can be things like remote address, request headers, destination, or any other generic attributes about the request.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380f2b7a9f2495ddd03ab&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380399ec7e02fad530bff&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;속성 제한 서버 RLS&lt;/span&gt;는 그림 14.8처럼 전송된 요청의 속성을 미리 정의한 속성 집합과 비교해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;일치하는 속성의 카운터를 늘린다.&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The RLS evaluates the request attributes that have been sent as part of a request against a set of predefined attributes, as shown in figure 14.8, and increments counters for those attributes.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238095bbf6e58afaddb60f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;카운트할 속성은 트리 형태로 그룹화하거나 정의해 결정할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The request attributes may be grouped or defined in a tree to determine what attributes should be counted.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380d89a72d2e193996b19&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;속성 또는 속성 집합이 속도 제한 서버 정의와 일치하면 해당 제한의 횟수를 늘린다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;If an attribute or set of attributes matches the RLS definitions, then the counts for those limits are incremented.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23801883fdc9efb4ff2e95&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;횟수가 임계값을 초과하면 해당 요청에는 속도 제한이 적용된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;If a count exceeds a threshold, that request is rate-limited.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c238057b89dc1033ab1b271&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/4e18f164-7560-462b-8413-dac456ee06d3/CleanShot_2025-05-18_at_15.45.51/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/4e18f164-7560-462b-8413-dac456ee06d3/CleanShot_2025-05-18_at_15.45.51/w=828,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/4e18f164-7560-462b-8413-dac456ee06d3/CleanShot_2025-05-18_at_15.45.51/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;요청 속성은 속도 제한 서버로 전송되며, 속도 제한 서버는 미리 설정한 디스크립터 집합과 비교해 속도 제한 결정을 내린다.&quot; width=&quot;816&quot; height=&quot;507.95180722891564&quot; data-nimg=&quot;1&quot; /&gt;요청 속성은 속도 제한 서버로 전송되며, 속도 제한 서버는 미리 설정한 디스크립터 집합과 비교해 속도 제한 결정을 내린다.&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c23805ea558ebe1a7d6a6ea&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238093b2f1cca936b7ef1d&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;엔보이 속도 제한 서버 설정하기&lt;/u&gt;&lt;/span&gt; CONFIGURING THE ENVOY RATE-LIMIT SERVER&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380f59935ff41cd013e1f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;속성 카운터와 한도가 포함된 속도 제한 서버 설정을 만들어보자. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Let&amp;rsquo;s configure the RLS with the attribute counters and limits.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23800783abdbe77c64fc16&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;우리 예제에서는 예제 조직에서 보유한 로열티 등급에 따라 특정 사용자 집단을 제한하고자 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;For our example use case, we want to limit certain groups of users depending on what loyalty tier they have with our example organization.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238022a6c4d7cf65b2d13b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청의 로열티 등급은 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;x-loyalty&lt;/code&gt; 헤더를 검사해 판단할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;We can determine the loyalty tier in a request by examining the x-loyalty header.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380ffa3d3c563edb94182&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238050aabec7bd18c042e5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;골드&lt;/span&gt; 등급&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;(x-loyalty: gold)&lt;/span&gt;&lt;/i&gt;의 사용자 그룹에는 요청을 분당 10개까지 허용하고, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;실버&lt;/span&gt; 등급&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;(x-loyalty: silver)&lt;/span&gt;&lt;/i&gt;에는 요청을 분당 5개까지 허용한다. 또한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;브론즈&lt;/span&gt; 등급&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;(x-loyalty: bronze)&lt;/span&gt;&lt;/i&gt;에는 요청을 분당 3개까지 허용한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;For a particular group of users in the gold tier (x-loyalty: gold), we allow 10 requests per minute.For silver (x-loyalty: silver), we allow five requests per minute; and for bronze (x-loyalty: bronze), we allow three requests per minute.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23808aaf2cc7a40f083d31&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;식별할 수 없는&lt;/span&gt; 로열티 등급의 경우, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;분당 요청이 하나&lt;/span&gt;를 넘어가면 속도 제한이 처리를 제한한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;For a loyalty tier that cannot be identified, rate limiting will kick in after one request per minute.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238048aa35fd7fdda8aea1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청이 디스크립터를 포착하는 속도 제한 서버 설정은 다음과 같이 표현할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23800f906ce4e2c84d73b5&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cat ch14/rate-limit/rlsconfig.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: catalog-ratelimit-config
  namespace: istioinaction
data:
  config.yaml: |
    domain: catalog-ratelimit
    descriptors:
      - key: header_match
        value: no_loyalty
        rate_limit:
          unit: MINUTE
          requests_per_unit: 1
      - key: header_match
        value: gold_request
        rate_limit:
          unit: MINUTE
          requests_per_unit: 10
      - key: header_match
        value: silver_request
        rate_limit:
          unit: MINUTE
          requests_per_unit: 5
      - key: header_match
        value: bronze_request
        rate_limit:
          unit: MINUTE
          requests_per_unit: 3&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238096ac80dceed7447191&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23803686cfe45bcd194d10&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실제 요청 헤더를 직접 다루지 않고, 요청의 일부로 전송된 속성만 다루고 있음을 유의하자. 다음 절에서는 이 속성들을 정의하는 방법을 살펴볼 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23805989a1deb2479ca253&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞서 언급했듯이, 속도 제한 서버 설정은 속도를 제한하기 위해 따라야 하는 규칙(= descriptor)을 정의한다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380b7b670f77ffe87dfb4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 데이터 플레인(= envoy proxy)을 거쳐 요청이 처리될 때 속성들이 속도 제한 서버로 보내진다. 속성이 규칙 조건에 일치하면 그에 따라 처리를 제한한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23808884c8e9e4a8bfc46d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238045a230d2b06261eaf1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c23805fb229f489ea76d924&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;요청 경로에 속도 제한 걸기*&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; CONFIGURING THE REQUEST PATH FOR RATE LIMITING&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380798963cd2a3cdbc915&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;속도 제한 서버 설정을 만들고 나면, 특정 요청에 대해 어떤 속성을 전송할 것인지 엔보이를 설정해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380e3809dc05c9e7293fa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 용어로는 이 설정을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;특정 요청 경로에 취하는 속도 제한 조치&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;rate-limit action&lt;/span&gt; 라고 부른다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238005b28df418e0a411af&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어, catalog 서비스를 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/items&lt;/code&gt; 경로로 호출하면 요청에 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;x-loyalty&lt;/code&gt; 헤더가 있는지와 어느 그룹에 속하는지를 포착하려고 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380e997c9faa1eb77d776&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238070b0e0effe245a8035&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;적절한 속성 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;action&lt;/span&gt; 을 속도 제한 서버로 보내도록 설정하려면 특정 엔보이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;루트&lt;/span&gt; 설정에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;rate_limit&lt;/span&gt; 설정을 지정해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238000806ed4da4da653cb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오에는 아직 전용 API가 없으므로(이 책을 저술하는 시점에는) EnvoyFilter 리소스를 사용해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238099b05bfa833cbef361&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;catalog 서비스의 모든 경로에 속도 제한 조치를 지정하는 방법은 다음과 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380b2a441f902f24efd77&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cat ch14/rate-limit/catalog-ratelimit-actions.yaml 
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: catalog-ratelimit-actions
  namespace: istioinaction
spec:
  workloadSelector:
    labels:
      app: catalog
  configPatches:
    - applyTo: VIRTUAL_HOST
      match:
        context: SIDECAR_INBOUND
        routeConfiguration:
          vhost:
            route:
              action: ANY
      patch:
        operation: MERGE
        # Applies the rate limit rules.
        value:
          rate_limits: # 속도 제한 조치
            - actions:
              - header_value_match:
                  descriptor_value: no_loyalty
                  expect_match: false
                  headers:
                  - name: &quot;x-loyalty&quot;
            - actions:
              - header_value_match:
                  descriptor_value: bronze_request
                  headers:
                  - name: &quot;x-loyalty&quot;
                    exact_match: bronze
            - actions:
              - header_value_match:
                  descriptor_value: silver_request
                  headers:
                  - name: &quot;x-loyalty&quot;
                    exact_match: silver
            - actions:
              - header_value_match:
                  descriptor_value: gold_request
                  headers:
                  - name: &quot;x-loyalty&quot;
                    exact_match: gold&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380c18195e8a2d3c2a88a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23804997a8ebd62762b2f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 이 규칙들을 속도 제한 서버와 함께 배포하고 데이터 플레인을 설정하는 방법을 살펴보자.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23800ebb69d89973c1db8c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;k8s configmap 으로 규칙을 배포하고, 속도 제한 서버를 레디스 백엔드와 함께 배포하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23807fa0ecc316f6865a53&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
tree ch14/rate-limit
ch14/rate-limit
├── catalog-ratelimit-actions.yaml
├── catalog-ratelimit.yaml
├── rls.yaml
└── rlsconfig.yaml

cat ch14/rate-limit/rlsconfig.yaml # rate limit server config
cat ch14/rate-limit/rls.yaml       # rate limit server

#
kubectl apply -f ch14/rate-limit/rlsconfig.yaml -n istioinaction
kubectl apply -f ch14/rate-limit/rls.yaml -n istioinaction

# 확인
kubectl get cm -n istioinaction catalog-ratelimit-config
kubectl get pod -n istioinaction                                
NAME                       READY   STATUS    RESTARTS      AGE
ratelimit-99d5d9c5-vd5b4   0/1     ContainerCreating   0          9s
redis-6cf4ff9768-vfgjd     1/1     Running             0          9s
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238066a800c39bd49682a4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23802f802ccef3dbabab36&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이가 속성을 속도 제한 서버로 보내게 해야 한다. 그래야 속도 제한 서버가 개수를 세어 속도 제한을 처리할 수 있기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23809e866eff8cc8c2d047&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 위해 그 역할을 하는 EnvoyFilter 리소스를 적용해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380baa4e3f2d0831bf5cc&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 기존에 반복 호출은 취소해두자

# 
cat ch14/rate-limit/catalog-ratelimit.yaml

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: catalog-ratelimit-filter
  namespace: istioinaction
spec:
  workloadSelector:
    labels:
      app: catalog
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: SIDECAR_INBOUND
      listener:
        portNumber: 3000
        filterChain:
          filter:
            name: &quot;envoy.filters.network.http_connection_manager&quot;
            subFilter:
              name: &quot;envoy.filters.http.router&quot;  # route filter 선택
    patch:
      operation: INSERT_BEFORE  # rate limit filter를 route filter 앞에 배치
      value:
        name: envoy.filters.http.ratelimit
        typed_config:
          &quot;@type&quot;: type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimit

          domain: catalog-ratelimit
          failure_mode_deny: true
          rate_limit_service:
            grpc_service:
              envoy_grpc:
                cluster_name: outbound|8081||ratelimit.istioinaction.svc.cluster.local # 위에서 배포한 ratelimit server의 endpoint
              timeout: 10s
            transport_api_version: V3

cat ch14/rate-limit/catalog-ratelimit-actions.yaml
kubectl apply -f ch14/rate-limit/catalog-ratelimit.yaml -n istioinaction
kubectl apply -f ch14/rate-limit/catalog-ratelimit-actions.yaml -n istioinaction
kubectl get envoyfilter -A
NAMESPACE       NAME                        AGE
istioinaction   catalog-ratelimit-actions   27s
istioinaction   catalog-ratelimit-filter    28s
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238078ab83f5c018ea6658&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23807882e9e91e3211ea23&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;속도 제한 기능을 시험해보기 위해 sleep 앱을 배포하고 catalog 서비스를 호출하는 클라이언트를 시뮬레이션해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380eda521ec6f2db6b906&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;sqf&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# sleep 앱에서 catalog 서비스를 호출 시도 : 대략 1분에 한 번 정도 호출 성공! &amp;gt;&amp;gt; x-loyalty 헤더가 없을 때 속도 제한 값!
kubectl exec -it deploy/sleep -n istioinaction -c sleep -- curl http://catalog/items -v
...

kubectl exec -it deploy/sleep -n istioinaction -c sleep -- curl http://catalog/items -v
...
&amp;lt; HTTP/1.1 429 Too Many Requests
&amp;lt; x-envoy-ratelimited: true
...

# silver 헤더는? 
kubectl exec -it deploy/sleep -n istioinaction -c sleep -- curl -H &quot;x-loyalty: silver&quot; http://catalog/items -v
kubectl exec -it deploy/sleep -n istioinaction -c sleep -- curl -H &quot;x-loyalty: silver&quot; http://catalog/items -v
kubectl exec -it deploy/sleep -n istioinaction -c sleep -- curl -H &quot;x-loyalty: silver&quot; http://catalog/items -v
kubectl exec -it deploy/sleep -n istioinaction -c sleep -- curl -H &quot;x-loyalty: silver&quot; http://catalog/items -v
kubectl exec -it deploy/sleep -n istioinaction -c sleep -- curl -H &quot;x-loyalty: silver&quot; http://catalog/items -v
kubectl exec -it deploy/sleep -n istioinaction -c sleep -- curl -H &quot;x-loyalty: silver&quot; http://catalog/items -v
...
&amp;lt; HTTP/1.1 429 Too Many Requests
...


#
docker exec -it myk8s-control-plane istioctl proxy-config route deploy/catalog.istioinaction --name 'InboundPassthroughClusterIpv4'
docker exec -it myk8s-control-plane istioctl proxy-config route deploy/catalog.istioinaction --name 'InboundPassthroughClusterIpv4' -o json | grep actions

docker exec -it myk8s-control-plane istioctl proxy-config route deploy/catalog.istioinaction --name 'inbound|3000||'
docker exec -it myk8s-control-plane istioctl proxy-config route deploy/catalog.istioinaction --name 'inbound|3000||' -o json | grep actions
docker exec -it myk8s-control-plane istioctl proxy-config route deploy/catalog.istioinaction --name 'inbound|3000||' -o json
...
                &quot;rateLimits&quot;: [
                    {
                        &quot;actions&quot;: [
                            {
                                &quot;headerValueMatch&quot;: {
                                    &quot;descriptorValue&quot;: &quot;no_loyalty&quot;,
                                    &quot;expectMatch&quot;: false,
                                    &quot;headers&quot;: [
                                        {
                                            &quot;name&quot;: &quot;x-loyalty&quot;
                                        }
                                    ]
                                }
                            }
                        ]
                    },
                    {
                        &quot;actions&quot;: [
                            {
                                &quot;headerValueMatch&quot;: {
                                    &quot;descriptorValue&quot;: &quot;bronze_request&quot;,
                                    &quot;headers&quot;: [
                                        {
                                            &quot;name&quot;: &quot;x-loyalty&quot;,
                                            &quot;exactMatch&quot;: &quot;bronze&quot;
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380e0b8abdfac767cff25&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/049deeae-0575-4c12-bd0e-2ead42742482/CleanShot_2025-05-18_at_16.11.29/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/049deeae-0575-4c12-bd0e-2ead42742482/CleanShot_2025-05-18_at_16.11.29/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/049deeae-0575-4c12-bd0e-2ead42742482/CleanShot_2025-05-18_at_16.11.29/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;326.23348899266176&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c23809bbad1feb647f7e37b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238039bc23ced593f13f47&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 실습을 위해 리소스 삭제&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380c593a0e87da5689060&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;sql&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl delete envoyfilter -n istioinaction --all
kubectl get envoyfilter -A

#
kubectl delete -f ch14/rate-limit/rlsconfig.yaml -n istioinaction
kubectl delete -f ch14/rate-limit/rls.yaml -n istioinaction
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380498382d4917e47f7a5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1fdb8b2c1c23806a9d20e36eda57afc4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;14.4. 루아로 이스티오의 데이터 플레인 확장하기&lt;/p&gt;
&lt;div id=&quot;block-1fdb8b2c1c238061a0c5c4fa7a4e870c&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Lua 소개 : 가벼운 명령형/절차적 언어로, 확장 언어로 쓰일 수 있는 스크립팅 언어를 주 목적으로 설계 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://ko.wikipedia.org/wiki/%EB%A3%A8%EC%95%84_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Wiki&lt;/a&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Extending Istio&amp;rsquo;s data plane with Lua&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23809db78beb28e315b017&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이미 존재하는 엔보이 필터를 설정해 이스티오의 데이터 플레인을 확장하는 것은 편리하지만, 추가하려는 기능이 기본 엔보이 필터에 없는 경우에는 어떻게 해야 할까? &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Extending Istio&amp;rsquo;s data plane by configuring existing Envoy filters is convenient, but what if the functionality we want to add doesn&amp;rsquo;t already exist as an out-of-the box Envoy filter? &lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23808982a8f7dbf147a67a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청 경로에 어떤 커스텀 로직을 구현하고 싶다면 어떻게 해야 할까? 이 절에서는 자체 커스텀 로직으로 데이터 플레인 동작을 확장하는 방법을 살펴본다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;What if we want to implement some custom logic on the request path? In this section, we look at how to extend data-plane behavior with our own custom logic.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380ed834bf77aa7cd8ce6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380c6a6fae3ff7c8dec82&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이전 절에서 엔보이에는 데이터 플레인 동작을 강화하기 위해 필터 체인에 추가할 수 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본 필터&lt;/span&gt;가 많이 있음을 확인했다. 그중 하나가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;루아 필터&lt;/span&gt;로, 루아 필터를 사용하면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;루아 스크립트를 작성해 프록시에 주입&lt;/span&gt;함으로써&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 요청/응답 경로의 동작을 커스텀&lt;/span&gt;할 수 있다 (그림 14.9 참조) &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;One of those is the Lua filter, which allows us to customize the behavior of the request or response path by writing Lua scripts and injecting them into the proxy.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23801cba7ee1b027c98eb5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 스크립트는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청이나 응답의 헤더를 조작&lt;/span&gt;하고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;바디&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;조사&lt;/span&gt;하는 데 사용할 수 있다. 계속해서 루아 스크립트를 주입해 요청 경로의 처리를 변경하도록 EnvoyFilter 리소스를 사용해 데이터 플레인을 설정할 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;These scripts can be used to manipulate the headers and inspect the body of a request or response. We will continue to use the EnvoyFilter resource to configure the data plane to inject Lua scripts to change the processing of the request path.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23806595aafe39ede2827b&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1015px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1fdb8b2c1c2380458288ebdfc8043817&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;루아 프로그래밍 언어&lt;/span&gt; Lua programming language &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://lua.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://lua.org/&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://luajit.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://luajit.org/&lt;/a&gt; 루아는 시스템 기능을 강화할 수 있는 강력하면서도 내장 가능한 스크립트 언어다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Lua is a powerful, embeddable scripting language that can be used to enhance the capabilities of a system.&lt;/span&gt;&lt;/i&gt; 루아는 동적 타입의 인터프리터 언어로, 루아 가상머신이 제공하는 메모리 자동 관리 기능을 갖추고 있다 (엔보이에서는 LuaJIT이다). &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Lua runs as a dynamically typed and interpreted language with automatic memory management provided by a Lua VM (in Envoy, this is LuaJIT).&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380259d8dfed07804313a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/826fb45a-d954-4179-9f4b-ad798da295a0/CleanShot_2025-05-18_at_16.25.42/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/826fb45a-d954-4179-9f4b-ad798da295a0/CleanShot_2025-05-18_at_16.25.42/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/826fb45a-d954-4179-9f4b-ad798da295a0/CleanShot_2025-05-18_at_16.25.42/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;루아 스크립트 언어로 요청 경로 기능 확장하기&quot; width=&quot;864&quot; height=&quot;288.3533742331289&quot; data-nimg=&quot;1&quot; /&gt;루아 스크립트 언어로 요청 경로 기능 확장하기&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380509501e79436a0f88a&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1015px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1fdb8b2c1c23801a94dae3f68e17a220&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;요청 바디를 검사하면 프&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;록시에서 스트림을 처리하는 방식에 영향&lt;/span&gt;을 줄 수 있다. 예를 들어&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 바디 전체를 메모리에 적&lt;/span&gt;재하는 작업을 수행할 수도 있는데, 이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;성능에 영향&lt;/span&gt;을 줄 수 있다. 루아 필터에 대한 엔보이 문서를 참조하자 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/lua_filter&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/lua_filter&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380239e80d0dc045ca419&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238015b24df48171c1c208&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;실습 : 요청 경로의 동작을 커스텀&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380a5a260ec61e390b396&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청 경로의 동작을 커스텀하는 일반적인 예를 들어본다. 들어오는 요청 모두를 A/B 테스트 그룹의 일부로 처리하고 싶다고 해보자.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23808fab0bf8cbf735b025&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어떤 그룹인지는 요청의 속성을 기반으로 런타임에서만 판단할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238013b8e5d03bb057b345&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;특정 요청이 어느 그룹에 속했는지 판단하려면 A/B 테스트 엔진을 호출해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380a5b7c2c0728031224a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 호출의 응답은 요청의 헤더로 추가해야 하며, 업스트림 서비스는 이 헤더를 사용해 A/B 테스트 목적에 맞는 라우팅 결정을 내릴 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380528de1ef708a7d61f5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 예제를 위해 몇 가지 보조 서비스를 배포해보자. 받은 요청의 헤더를 되돌려 보내는 샘플 httpbin 서비스를 배포할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380bcb752e208337342b7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 샘플 A/B 테스트 버킷 서비스도 배포해보겠다. 이 서비스는 요청의 헤더를 평가해 요청이 속해야 하는 그룹을 나타내는 문자열을 반환한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c238069a414e9779a603506&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
cat ch14/bucket-tester-service.yaml
...
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: bucket-tester
    version: v1
  name: bucket-tester
spec:
  replicas: 1
  selector:
    matchLabels:
      app: bucket-tester
      version: v1
  template:
    metadata:
      labels:
        app: bucket-tester
        version: v1
    spec:
      containers:
      - image: hashicorp/http-echo:1.0 # 수정 https://hub.docker.com/r/hashicorp/http-echo/tags
        imagePullPolicy: IfNotPresent
        name: bucket-tester
        args:
        - &quot;-text=dark-launch-7&quot;        
        ports:
        - containerPort: 5678
          name: http
          protocol: TCP
        securityContext:
          privileged: false

#
kubectl apply -f ch14/httpbin.yaml -n istioinaction
kubectl apply -f ch14/bucket-tester-service.yaml -n istioinaction

# 확인
kubectl get pod -n istioinaction
NAME                             READY   STATUS    RESTARTS      AGE
NAME                             READY   STATUS    RESTARTS   AGE
bucket-tester-688c598b47-96gvm   2/2     Running   0          37s
httpbin-85d76b4bb6-dwxzv         2/2     Running   0          37s
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380cf99d4f6de5c0debd5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238083bde3fc47d7c9899b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청이나 응답 헤더를 조&lt;/span&gt;작하는 용도로 작성할 수 있는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 루아 스크립트&lt;/span&gt;를 살펴보고, 이 사용 사례를 구현하는 방법도 살펴보자. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Let&amp;rsquo;s look at a Lua script we can write to manipulate the request or response headers and how we can implement this use case.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380efb3c4ed958b6447f2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;루아 함수&lt;/span&gt; &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;envoy_on_reqest()&lt;/code&gt; 혹은 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;envoy_on_response()&lt;/code&gt; 를 구현해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청&lt;/span&gt;과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;응답&lt;/span&gt; 각각을 확인하고 조작할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;In Envoy, we can implement the envoy_on_request () or envoy_on_response() Lua function to inspect and manipulate the request and response, respectively.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380978ee3efaab2856baf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;루아 내에서 다른 서비스를 호출해야 한다면 엔보이가 제공하는 함수를 사용해야 한다 (RPC 호출을 하는데 범용 루아 라이브러리를 사용하면 안된다. 우리는 엔보이가 자체 논블로킹 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;non-blocking&lt;/span&gt; 스레딩 아키텍처로 호출을 올바르게 관리하길 원하기 때문이다). &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;If we need to make a call to another service from within Lua, we have to use an Envoy-provided function (we should not use a general-purpose Lua library to make RPC calls, because we want Envoy to manage the call correctly with its non-blocking threading architecture).&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23802489a1f82cebd24847&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;httpCall()&lt;/code&gt; 함수를 사용하면 외부 서비스와 통신할 수 있다. 다음 스크립트는 우리의 사용 사례를 구현한 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;We can use the http-Call() function to communicate with an external service. The following script implements our use case:&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c238052a41cc9fd19bb6f75&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;lua&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cat ch14/lua-filter.yaml
...
            function envoy_on_request(request_handle)
              local headers, test_bucket = request_handle:httpCall(
              &quot;bucket_tester&quot;,
              {
                [&quot;:method&quot;] = &quot;GET&quot;,
                [&quot;:path&quot;] = &quot;/&quot;,
                [&quot;:scheme&quot;] = &quot;http&quot;,
                [&quot;:authority&quot;] = &quot;bucket-tester.istioinaction.svc.cluster.local&quot;,
                [&quot;accept&quot;] = &quot;*/*&quot;
              }, &quot;&quot;, 5000) 

              sanitized_bucket = string.gsub(test_bucket, &quot;[\r\n]&quot;, &quot;&quot;) -- sanitize test_bucket string
              request_handle:headers():add(&quot;x-test-cohort&quot;, sanitized_bucket)               
            end          
            function envoy_on_response(response_handle)
              response_handle:headers():add(&quot;istioinaction&quot;, &quot;it works!&quot;)
            end
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238079914dcc0249fdf9db&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380f9ab52f53eff4e654d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;envoy_on_reqest()&lt;/code&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;함수&lt;/span&gt;를 구현하고, &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;httpCall()&lt;/code&gt; 내장 함수를 사용해 외부 서비스와 통신하고 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380ff89acd55572298685&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 응답을 받아 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;x-test-cohort&lt;/span&gt; 라는 헤더를 추가하고 있다. &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;httpCall()&lt;/code&gt; 포함한 내장 함수는 문서 참조 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/lua_filter#stream-handle-api&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380928e9bf710c98177ed&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞 절에서 했던 것처럼 이 스크립트를 EnvoyFilter 리소스에 추가할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380229e2df659df299f99&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cat ch14/lua-filter.yaml
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: httpbin-lua-extension
  namespace: istioinaction
spec:
  workloadSelector:
    labels:
      app: httpbin
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: SIDECAR_INBOUND
      listener:
        portNumber: 80
        filterChain:
          filter:
            name: &quot;envoy.filters.network.http_connection_manager&quot;
            subFilter:
              name: &quot;envoy.filters.http.router&quot;
    patch:
      operation: INSERT_BEFORE
      value: 
       name: envoy.lua
       typed_config:
          &quot;@type&quot;: &quot;type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua&quot;
          inlineCode: |
            function envoy_on_request(request_handle)
              local headers, test_bucket = request_handle:httpCall(
              &quot;bucket_tester&quot;,
              {
                [&quot;:method&quot;] = &quot;GET&quot;,
                [&quot;:path&quot;] = &quot;/&quot;,
                [&quot;:scheme&quot;] = &quot;http&quot;,
                [&quot;:authority&quot;] = &quot;bucket-tester.istioinaction.svc.cluster.local&quot;,
                [&quot;accept&quot;] = &quot;*/*&quot;
              }, &quot;&quot;, 5000) 
              
              sanitized_bucket = string.gsub(test_bucket, &quot;[\r\n]&quot;, &quot;&quot;) -- sanitize test_bucket string
              request_handle:headers():add(&quot;x-test-cohort&quot;, sanitized_bucket)               
            end          
            function envoy_on_response(response_handle)
              response_handle:headers():add(&quot;istioinaction&quot;, &quot;it works!&quot;)
            end
  - applyTo: CLUSTER
    match:
      context: SIDECAR_OUTBOUND
    patch:
      operation: ADD
      value: # cluster specification
        name: bucket_tester
        type: STRICT_DNS
        connect_timeout: 0.5s
        lb_policy: ROUND_ROBIN
        load_assignment:
          cluster_name: bucket_tester
          endpoints:
          - lb_endpoints:
            - endpoint:
                address:
                  socket_address:
                    protocol: TCP
                    address: bucket-tester.istioinaction.svc.cluster.local
                    port_value: 80
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380d6a803c0b2b0cbaf56&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23805c87edc52109a313c5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;workloadSelector 정의한 대로 이 필터를 httpbin 워크로드에 적용 후 httpbin 서비스 호출 확인!&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380b3a6dac16aa464d7ca&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;applescript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl apply -f ch14/lua-filter.yaml
kubectl get envoyfilter -n istioinaction

# istio-proxy config 확인 내용 추가해두자


kubectl exec -it deploy/sleep -n istioinaction -c sleep -- curl -H &quot;x-test-cohort: dark-launch-7&quot; http://httpbin.istioinaction:8000/ -v


# httpbin 서비스 호출 확인! 
kubectl exec -it deploy/sleep -n istioinaction -c sleep -- curl http://httpbin.istioinaction:8000/ -v
* Host httpbin.istioinaction:8000 was resolved.
* IPv6: (none)
* IPv4: 10.200.0.28
*   Trying 10.200.0.28:8000...
* Connected to httpbin.istioinaction (10.200.0.28) port 8000
&amp;gt; GET / HTTP/1.1
&amp;gt; Host: httpbin.istioinaction:8000
&amp;gt; User-Agent: curl/8.5.0
&amp;gt; Accept: */*
&amp;gt; 
&amp;lt; HTTP/1.1 200 OK
&amp;lt; server: envoy
&amp;lt; date: Sat, 24 May 2025 16:50:58 GMT
&amp;lt; content-type: text/html; charset=utf-8
&amp;lt; content-length: 9593
&amp;lt; access-control-allow-origin: *
&amp;lt; access-control-allow-credentials: true
&amp;lt; x-envoy-upstream-service-time: 3
&amp;lt; istioinaction: it works!
&amp;lt; 
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;

&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;title&amp;gt;httpbin.org&amp;lt;/title&amp;gt;
    &amp;lt;link href=&quot;https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700&quot;
...
    
kubectl exec -it deploy/sleep -n istioinaction -c sleep -- curl http://httpbin.istioinaction:8000/headers

{
  &quot;headers&quot;: {
    &quot;Accept&quot;: &quot;*/*&quot;, 
    &quot;Host&quot;: &quot;httpbin.istioinaction:8000&quot;, 
    &quot;User-Agent&quot;: &quot;curl/8.5.0&quot;, 
    &quot;X-B3-Parentspanid&quot;: &quot;2e7142be2dc74902&quot;, 
    &quot;X-B3-Sampled&quot;: &quot;1&quot;, 
    &quot;X-B3-Spanid&quot;: &quot;3b5211d85959411b&quot;, 
    &quot;X-B3-Traceid&quot;: &quot;be30ab938800b9482e7142be2dc74902&quot;, 
    &quot;X-Envoy-Attempt-Count&quot;: &quot;1&quot;, 
    &quot;X-Forwarded-Client-Cert&quot;: &quot;By=spiffe://cluster.local/ns/istioinaction/sa/httpbin;Hash=d9400e65c508a6d8ddc36aba279db8a5e5df8831ab13421bcca8d15a1c5a3d93;Subject=\&quot;\&quot;;URI=spiffe://cluster.local/ns/istioinaction/sa/sleep&quot;, 
    &quot;X-Test-Cohort&quot;: &quot;dark-launch-7&quot;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380fe9249f3991ca6e56a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238062b199e42ff17eb50e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238031bd95d748c3d234e6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;자세한 내용은 이 책 소스 코드에 있는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ch14/lua-filter.yaml&lt;/code&gt; 파일에서 살펴볼 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380f5b424c2e66537919b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 예제에서는 데이터 플레인의 기능을 확장하기 위해 의도적으로 구축된 필터를 사용하는 방법을 알아봤다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23802e8455e0a2533c407a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;루아 스크립트 언어를 사용해 이 기능을 구현했으며, 내장 함수를 사용해 다른 함수를 호출했다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23809ca4c7deb44cae9278&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 절에서는 웹어셈블리를 사용해 다른 언어로 우리의 커스텀 기능을 구현하는 방법을 다룬다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c238046a866d34d3f974d1d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380368a64d3e2f3c8ff50&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 실습을 위해 리소스 삭제&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380bbb067e3ed1f90bfc4&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;sql&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl delete envoyfilter -n istioinaction --all
kubectl get envoyfilter -A

#
kubectl delete -f ch14/httpbin.yaml -n istioinaction
kubectl delete -f ch14/bucket-tester-service.yaml -n istioinaction
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380daa9f4c275db72eb95&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1fdb8b2c1c23800cbd55e867f8e72533&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238004b16dff0d2ac3c3a1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Lua 를 활용하는 실습 시나리오 추가해볼 것!&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380249d1bc3cb9bb78c2a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1fdb8b2c1c2380a1932deae46973b2a3&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;14.5. 웹어셈블리로 이스티오의 데이터 플레인 확장하기&lt;/p&gt;
&lt;div id=&quot;block-1fdb8b2c1c23800491b4f40c7c9c6ce1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;들어가며&lt;/span&gt; : 웹어셈블리로 새 엔보이 필터를 작성 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/tasks/extensibility/wasm-module-distribution/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Extending Istio&amp;rsquo;s data plane with WebAssembly&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238092ac82fc589c5f1d67&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 장에서 살펴보는, 요청 경로상에서 이스티오를 확장하는 마지막 방법은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;웹어셈블리&lt;/span&gt;로 새 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 필터를 작성&lt;/span&gt;하는 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The last approach to extend Istio on the request path that we cover in this chapter is writing new Envoy filters with WebAssembly.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238091bb07ed43eada0894&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞 절에서는 기존 엔보이 필터를 재사용하고 설정해 기본 이스티오 기능을 확장해봤으며, 요청 경로를 조작하는 우리의 자체 커스텀 스크립트를 주입하기도 했다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380d9a452d54298e81612&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 절에서는 우리의 자체 엔보이 필터를 구축하는 방법과 이스티오 데이터 플레인에 배포하는 방법을 살펴본다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;In this section, we explore how we can build our own Envoy filters and dynamically deploy them to the Istio data plane.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1fdb8b2c1c2380549366ca3e1a529aaf&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link notion-page link-mention&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline; transition: background 120ms ease-in; vertical-align: middle; color: inherit; position: relative;&quot; href=&quot;https://istio.io/latest/blog/2020/deploy-wasm-declarative/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: cover; object-position: center center;&quot; src=&quot;https://istio.io/latest/favicons/android-192x192.png&quot; alt=&quot;Christian Posta (Solo.io) Declarative WebAssembly deployment for Istio&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-thickness: 1px; text-decoration-color: #e9e9e7; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Christian Posta (Solo.io) &lt;/span&gt;Declarative WebAssembly deployment for Istio&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p id=&quot;block-1fdb8b2c1c23805c90c0e8cfe224b154&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link notion-page link-mention&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline; transition: background 120ms ease-in; vertical-align: middle; color: inherit; position: relative;&quot; href=&quot;https://istio.io/latest/blog/2021/wasm-api-alpha/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: cover; object-position: center center;&quot; src=&quot;https://istio.io/latest/favicons/android-192x192.png&quot; alt=&quot;Daniel Grimm (Red Hat), Pengyuan Bian (Google), Takeshi Yoneda (Tetrate) Announcing the alpha availability of WebAssembly Plugins&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-thickness: 1px; text-decoration-color: #e9e9e7; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Daniel Grimm (Red Hat), Pengyuan Bian (Google), Takeshi Yoneda (Tetrate) &lt;/span&gt;Announcing the alpha availability of WebAssembly Plugins&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p id=&quot;block-1fdb8b2c1c23805a8703d098634dce5a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link notion-page link-mention&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline; transition: background 120ms ease-in; vertical-align: middle; color: inherit; position: relative;&quot; href=&quot;https://istio.io/latest/blog/2021/wasm-progress/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: cover; object-position: center center;&quot; src=&quot;https://istio.io/latest/favicons/android-192x192.png&quot; alt=&quot;Pengyuan Bian (Google) Istio and Envoy WebAssembly Extensibility, One Year On&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-thickness: 1px; text-decoration-color: #e9e9e7; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Pengyuan Bian (Google) &lt;/span&gt;Istio and Envoy WebAssembly Extensibility, One Year On&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p id=&quot;block-1fdb8b2c1c2380e0a43cee856f5619b1&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link notion-page link-mention&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline; transition: background 120ms ease-in; vertical-align: middle; color: inherit; position: relative;&quot; href=&quot;https://istio.io/v1.17/docs/reference/config/proxy_extensions/wasm-plugin/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: cover; object-position: center center;&quot; src=&quot;https://istio.io/v1.17/favicons/android-192x192.png&quot; alt=&quot;Istio Wasm Plugin&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-thickness: 1px; text-decoration-color: #e9e9e7; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Istio &lt;/span&gt;Wasm Plugin&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p id=&quot;block-1fdb8b2c1c2380449531dd29de0808cc&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link notion-page link-mention&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline; transition: background 120ms ease-in; vertical-align: middle; color: inherit; position: relative;&quot; href=&quot;https://istio.io/v1.17/docs/ops/configuration/extensibility/wasm-pull-policy/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: cover; object-position: center center;&quot; src=&quot;https://istio.io/v1.17/favicons/android-192x192.png&quot; alt=&quot;Istio Pull Policy for WebAssembly Modules&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-thickness: 1px; text-decoration-color: #e9e9e7; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Istio &lt;/span&gt;Pull Policy for WebAssembly Modules&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380259951c8df577ed7f1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380ddaec9e1d92f9c1394&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;14.5.1 웹어셈블리 소개&lt;/u&gt;&lt;/span&gt; Introducing WebAssembly&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238031836de00b62406e3a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;웹어셈블리&lt;/span&gt; Wasm, &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;WebAssembly&lt;/span&gt; 란 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;바이너리 명령 형식&lt;/span&gt;으로, 여러 가지 환경 간에 이식할 수 있는 것을 목표로 했으며 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;여러 프로그래밍 언어로 컴파일해 가상머신에서 실행&lt;/span&gt;할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;WebAssembly (Wasm) is a binary instruction format that is intended to be portable across environments and that can be compiled from many different programming languages and run in a VM.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23804a91d7d513f0ed9148&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;본래 웹어셈블리는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;브라우저의 웹 애플리케이션&lt;/span&gt;에서&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; CPU 집약적인 작업의&lt;/span&gt; 실행 속도를 높이고, 브라우저 기반 애플리케이션 지원을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자바스크립트 외의 언어로도 확장&lt;/span&gt;하기 위해 개발됐다 (그림 14.10 참조). &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Wasm was originally developed to speed up the execution of CPU-intensive operations for web apps in a browser and extend the support for browser-based apps to languages other than JavaScript.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238013b178c6c47215cd47&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;웹어셈블리는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2019&lt;/span&gt;년에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;W3C 권고 &lt;/span&gt;사항이 됐으며 모든 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;주요 브라우저에서 지원&lt;/span&gt;하고 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;It became a W3C Recommendation in 2019 and is supported in all major browsers.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380f1af80e396fd91505a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/24295ecc-3701-4355-9858-5fa0e73131da/CleanShot_2025-05-18_at_17.08.08/w=640,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/24295ecc-3701-4355-9858-5fa0e73131da/CleanShot_2025-05-18_at_17.08.08/w=384,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/24295ecc-3701-4355-9858-5fa0e73131da/CleanShot_2025-05-18_at_17.08.08/w=640,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;297.9829406738281&quot; height=&quot;318.9817385065475&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238097894ada6663af0009&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;웹어셈블리는 모듈로 패키징된 커스텀 코드로, 웹 브라우저 같은 대상 호스트 안의 격리된 가상머신에서 안전하게 실행할 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23801b99e7ec2679ce01fc&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/d29c06ca-f3dd-4032-ae01-ec9b6204020d/CleanShot_2025-05-21_at_16.13.00/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/d29c06ca-f3dd-4032-ae01-ec9b6204020d/CleanShot_2025-05-21_at_16.13.00/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/d29c06ca-f3dd-4032-ae01-ec9b6204020d/CleanShot_2025-05-21_at_16.13.00/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;720&quot; height=&quot;367.20961281708946&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238053aba6f37e1c3b44f8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380a58f51efef5b2a53b4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;웹어셈블리는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;저장 공간과 메모리를 적게 차지&lt;/span&gt;하고 거의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네이티브에 가까운 속도&lt;/span&gt;로 실행되도록 설계됐다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Wasm is intended to have a compact size and load footprint and execute at near-native speeds.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23807790d5de4fc3b72ab3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 호스트 애플리케이션(즉, 브라우저)에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;내장돼도 안전&lt;/span&gt;한데, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메모리 안전&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;memory safe&lt;/span&gt; 하고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;격리된&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;sandboxed&lt;/span&gt; 실행 환경(가상머신)에서 실행되기 때문이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;It is also safe to embed in host applications (that is, a browser) because it is memory safe and runs in a sandboxed execution environment (VM).&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23806f9663ec5631b64646&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;웹어셈블리 모듈은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;호스트 시스템이 허용하는 메모리와 기능에만 접근&lt;/span&gt;할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;A Wasm module only has access to memory and functionality that the host system allows.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380029025ebf8ea071f03&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c23806f97c0e1c9283d9a42&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;14.5.2 왜 엔보이에 웹어셈블리를 사용하는가?&lt;/u&gt;&lt;/span&gt; Why WebAssembly for Envoy?&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238031b16feb4f632632cc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네이티브 엔보이 필터를 직접 작성&lt;/span&gt;하는 데는 크게 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;두 가지 단점&lt;/span&gt;이 있다&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380a3bdf6f23dee29600b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;C++&lt;/span&gt; 여야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23801d85d2e698bd162894&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;변경 사항을 엔보이의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;새 바이너리로 정적으로 빌드&lt;/span&gt;해야 하는데, 이는 사실상 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 &amp;lsquo;커스텀&amp;rsquo; 빌드&lt;/span&gt;다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380c4b7e2cb5f1e111d2d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380b786cbf15ff28f21b9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;웹어셈블리 실행 엔진을 내장&lt;/span&gt;하고 있으므로, HTTP 필터를 포함해 엔보이의 다양한 영역을 커스터마이징하고 확장하는 데 사용할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Envoy embeds a WebAssembly execution engine that can be used to customize and extend various areas of Envoy, including HTTP filters.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23806c8672f16506ee4260&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;웹어셈블리가 지원하는 언어&lt;/span&gt;라면 어느 것이든 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 필터로 작성&lt;/span&gt;해 그림 14.11 처럼 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;런타임에 프록시로 동적&lt;/span&gt;으로 불러올 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;You can write Envoy filters in any language supported by Wasm and dynamically load them into the proxy at run time, as shown in figure 14.11.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380a39281cbb55a5b690e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉, 이스티오에서&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 기본 엔보이 프록시&lt;/span&gt;를 계속 사용하면서 커스텀 필터를&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 런타임에 동적으로 불러&lt;/span&gt;올 수 있다는 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This means you can keep using the out-of-the-box Envoy proxy in Istio and &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;dynamically load &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;your &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;custom filter&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;s at run time.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23809cb1e6db75117f2c70&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/943d9f04-3cf9-423b-99df-b9e57823f9a5/CleanShot_2025-05-18_at_17.26.28/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/943d9f04-3cf9-423b-99df-b9e57823f9a5/CleanShot_2025-05-18_at_17.26.28/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/943d9f04-3cf9-423b-99df-b9e57823f9a5/CleanShot_2025-05-18_at_17.26.28/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;웹어셈블리 (Wasm) 모듈을 패키징해 웹어셈블리 HTTP 필터 내에서 실행할 수 있다.&quot; width=&quot;912&quot; height=&quot;345.41689373297004&quot; data-nimg=&quot;1&quot; /&gt;웹어셈블리 (Wasm) 모듈을 패키징해 웹어셈블리 HTTP 필터 내에서 실행할 수 있다.&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380809a43c3bb2dcf485b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380788f30f3632ad99208&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;How it works - &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/blog/2020/deploy-wasm-declarative/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c238053a220fa4c57ae1a3c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/41240b3d-f54b-4b48-ad75-d54776280c89/image/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/41240b3d-f54b-4b48-ad75-d54776280c89/image/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/41240b3d-f54b-4b48-ad75-d54776280c89/image/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;720&quot; height=&quot;307.1800208116545&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23806a849cde4b1686463b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Set up&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; local cache&lt;/span&gt; of Wasm extensions&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380c3930ece0f0f8a3b7a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pull&lt;/span&gt; desired Wasm extension into the local cache&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380f59553dea4c09c35ae&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mount&lt;/span&gt; the&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;wasm-cache&lt;/code&gt;&amp;nbsp;into appropriate workloads&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380a2883afaf1a8a4b02a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Configure Envoy with&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;EnvoyFilter&lt;/code&gt;&amp;nbsp;CRD to use the Wasm filter&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380eab98cfb88b123ad2e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380dbba2feff7028a813e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Image fetcher in Istio agent - &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/blog/2021/wasm-api-alpha/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380b7847be22df40996a7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/0b1dd9cf-fee6-4104-8c23-349af23cddee/image/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/0b1dd9cf-fee6-4104-8c23-349af23cddee/image/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/0b1dd9cf-fee6-4104-8c23-349af23cddee/image/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;Remote Wasm module fetch flow&quot; width=&quot;720&quot; height=&quot;488.9236790606654&quot; data-nimg=&quot;1&quot; /&gt;Remote Wasm module fetch flow&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380869aa5cc7a6c1f3c0f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio 1.9&lt;/span&gt;부터 Istio-agent는&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;EnvoyFilters&lt;/code&gt;istio-agent 내부의 xDS 프록시와 Envoy의 확장 구성 검색 서비스(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ECDS&lt;/span&gt;)를 활용하여 remote에 구성된 원격 HTTP 소스에서 가져온 Wasm 바이너리를 로드하는 안정적인 솔루션을 제공해 왔습니다.&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; Istio 1.12&lt;/span&gt;의 새로운 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Wasm API 구현&lt;/span&gt;에도 동일한 메커니즘이 적용됩니다. 원격 가져오기가 실패할 경우 Envoy가 잘못된 구성으로 인해 중단될 염려 없이 HTTP 원격 리소스를 안정적으로 사용할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238034a279e85c7e19b4d9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한,&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; Istio 1.12&lt;/span&gt;는 이 기능을&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; Wasm OCI 이미지로 확장&lt;/span&gt;합니다. 즉, Istio 에이전트는 이제 Docker Hub, Google Container Registry(GCR), Amazon Elastic Container Registry(ECR) 등 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모든 OCI 레지스트리&lt;/span&gt;에서&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; Wasm 이미지&lt;/span&gt;를 가져올 수 있습니다. 이미지를 가져온 후, Istio 에이전트는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Wasm 바이너리를 추출&lt;/span&gt;하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;캐시&lt;/span&gt;한 다음 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Envoy 필터 체인에 삽입&lt;/span&gt;합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380c9b827dffa4936285b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380c6806edfd4ca392213&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Wasm module distribution via the Istio Agent - &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/blog/2021/wasm-progress/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380129c9fecf662afb544&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://assets.super.so/b27a22c8-1220-4332-8c7b-b84c768ca5d7/images/dab13550-d7e4-4c6a-a43c-e48340927194/architecture-istio-agent-downloading-wasm-module.svg&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;504&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23807ca680c11632413f35&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Istio 1.9 이전에는&amp;nbsp;원격 Wasm 모듈을 프록시에 배포하기 위해&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/base.proto#config-core-v3-remotedatasource&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Envoy 원격 데이터 소스가 필요했습니다.&amp;nbsp;&lt;/a&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://gist.github.com/bianpengyuan/8377898190e8052ffa36e88a16911910&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;이 예시에서는&lt;/a&gt;&amp;nbsp;두 가지&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;EnvoyFilter&lt;/code&gt;리소스가 정의되어 있습니다. 하나는 원격 가져오기 Envoy 클러스터를 추가하는 리소스이고, 다른 하나는 HTTP 필터 체인에 Wasm 필터를 삽입하는 리소스입니다. 이 방법에는 단점이 있습니다. 잘못된 구성이나 일시적인 오류로 인해 원격 가져오기가 실패하면 Envoy가 잘못된 구성에 고정됩니다. Wasm 확장 프로그램이&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/wasm/v3/wasm.proto#extensions-wasm-v3-pluginconfig&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;fail closed&lt;/a&gt;&amp;nbsp;로 구성된 경우 , 잘못된 원격 가져오기로 인해 Envoy 서비스가 중단됩니다. 이 문제를 해결하려면 Envoy xDS 프로토콜을&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/envoyproxy/envoy/issues/9447&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;근본적으로 변경&lt;/a&gt;&amp;nbsp;하여 비동기 xDS 응답을 허용해야 합니다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23801a87fdfd0ecc7cc0af&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/configuration/overview/extension&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Istio 1.9는 istio-agent 내부의 xDS 프록시와 Envoy의 확장 구성 검색 서비스&lt;/a&gt;&amp;nbsp;(ECDS)&amp;nbsp;를 활용하여 기본적으로 안정적인 배포 메커니즘을 제공합니다 .&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238083ba8be3c1d5fd7917&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istio-agent는 istiod에서 확장 구성 리소스 업데이트를 가로채고, 원격 페치 힌트를 읽어와 Wasm 모듈을 다운로드한 후, 다운로드된 Wasm 모듈의 경로로 ECDS 구성을 다시 작성합니다. 다운로드가 실패하면 istio-agent는 ECDS 업데이트를 거부하고 잘못된 구성이 Envoy에 도달하는 것을 방지합니다. 자세한 내용은&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/tasks/extensibility/wasm-module-distribution/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Wasm 모듈 배포 관련 문서를&lt;/a&gt;&amp;nbsp;참조하세요 .&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23809b8ae0f7addddc2bc4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c23800eb674d6705ea09117&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;14.5.3 웹어셈블리로 새로운 엔보이 필터 만들기&lt;/u&gt;&lt;/span&gt; Building a new Envoy filter with WebAssembly&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23801591f2e274417d5a7a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;웹어셈블리로 엔보이 필터를 빌드하려면 어떤 언어를 사용하고 싶은지, 어떤 엔보이 버전을 사용 중인지, 그 버전에서 어떤 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 ABI&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Abstract Binary Interace&lt;/span&gt; 를 지원하는지 등을 알아야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380918654c93112aeddc0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러고 나서 적절한 언어 SDK를 골라 빌드 및 종속성 도구를 제대로 준비해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380a38d27d75a8226e4c8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이절에서는 Sola.io의 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;wasme&lt;/code&gt; 라는 오픈소스 개발자 도구를 사용해 엔보이용 웹어셈블리 필터를 만들고 빌드해본다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23806991a7d3ecfbf01a21&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;wasme&lt;/code&gt; 를 사용하면 엔보이 프로젝트용 웹어셈블리를 빠르게 부트스트랩하고 보일러플레이트 생성 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;boilerplate scaffolding&lt;/span&gt; 을 모두 자동화해준다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380c7a45bd1c91fa3d2cb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그럼 웹어셈블리로 엔보이 필터 빌드를 시작하는 방법을 살펴보자.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23802eb292f64f8830ca9f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 책을 저술하는 시점에 엔보이 웹어셈블리 SDK가 있는 프래그래밍 언어는 다음 네 가지다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380bebd65ec370e95bf44&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;C++&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238079b092ee9d1acebd1c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Rust&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23809aa8ebeb8450e1299d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;AssemblyScript 어셈블리스크립트 (TypeScript 타입스크립트)&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23800cb980eec550676ca5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;TinyGo&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380a3a728d9f0e447b32a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380f8889cd85b265d4944&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 절에선느 어셈블리스크립트 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.assemblyscript.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.assemblyscript.org/&lt;/a&gt; 를 사용해 웹어셈블리로 새 엔보이 필터를 빌드해본다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380b4af77c62ba2ecc8bc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어셈블리스크립트는 타입스크립트의 변형이므로 자바스크립트 개발자라면 익숙할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238070ba29ff85bdc4e14d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어셈블리스크립트는 엔보이 필터를 구축하는 데 있어 C++의 훌륭한 대체재다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23807ca78fe12835345393&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1015px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1fdb8b2c1c238063926ad2a8d3b461f5&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;엔보이의 웹어셈블리의 지원은 실험적인 것으로 간주되므로 바뀔 수 있다. 따라서 직접 만들어 엔보이에 배포하는 웹어셈블리 모듈은 운영 환경에 들어가기 전에 모두 철저히 테스트해볼 것을 권장한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380fc96b3da4ce6b85255&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238049baafc92e3cd95707&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380f9b838e5e9fce14cfe&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;[공식 문서] &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;Distributing WebAssembly Modules 실습&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/tasks/extensibility/wasm-module-distribution/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238081b7d3e3bd0588b1cc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;소개&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23809fa32fd8450ccdd06f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/blog/2020/wasm-announce/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Istio는 WebAssembly(Wasm)를 사용하여 프록시 기능을 확장할&lt;/a&gt;&amp;nbsp;수 있는 기능을 제공합니다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238097930dfc1dbc4c4da2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Wasm 확장성의 주요 장점 중 하나는 런타임에 확장 기능을 동적으로 로드할 수 있다는 것입니다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380e0b38ce4c181ac74b9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이러한 확장 기능은 먼저 Envoy 프록시에 배포해야 합니다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380db8aace8fdf645eb80&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Istio는 프록시 에이전트가 Wasm 모듈을 동적으로 다운로드할 수 있도록 허용하여 이를 가능하게 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23805895c4ffe18b0b3cd5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380dabaedc3dc2cf16e02&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Wasm 모듈 구성&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238064be94d47c1f80590a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 예시에서는 메시에 HTTP 기본 인증 확장을 추가합니다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238043891fd60ef8f714f1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;원격 이미지 레지스트리에서&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/istio-ecosystem/wasm-extensions/tree/master/extensions/basic_auth&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;기본 인증 모듈을&lt;/a&gt;&amp;nbsp;가져와 로드하도록 Istio를 구성합니다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23808f8ed1ea9d5e043b66&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 모듈은 API 호출 시 실행되도록 구성됩니다&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/api&lt;/code&gt;.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238010a797cc490894e8de&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;원격 Wasm 모듈로 WebAssembly 필터를 구성하려면&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;WasmPlugin&lt;/code&gt;리소스를 생성하세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380c880c4ecb3dc2bcb80&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;properties&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 설정 전 호출 확인
EXT_IP=$(kubectl -n istio-system get svc istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
docker exec -it mypc curl -s -H &quot;Host: webapp.istioinaction.io&quot; http://$EXT_IP/api/catalog -v


#
kubectl explain wasmplugins.extensions.istio.io
...

# 
kubectl apply -f - &amp;lt;&amp;lt;EOF
apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: basic-auth
  namespace: istio-system # 모든 네임스페이스에 영향
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  url: oci://ghcr.io/istio-ecosystem/wasm-extensions/basic_auth:1.12.0
  phase: AUTHN
  pluginConfig:
    basic_auth_rules:
      - prefix: &quot;/api&quot;
        request_methods:
          - &quot;GET&quot;
          - &quot;POST&quot;
        credentials:
          - &quot;ok:test&quot;
          - &quot;YWRtaW4zOmFkbWluMw==&quot;
EOF

#
kubectl get WasmPlugin -A
NAMESPACE      NAME         AGE
istio-system   basic-auth   21s
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238054b32bda6ea24d5644&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23808b8219df08928b2f77&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;구성된 Wasm 모듈을 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380e08200e97d278b8cf5&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;perl&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 자격 증명 없이 테스트
EXT_IP=$(kubectl -n istio-system get svc istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
docker exec -it mypc curl -s -H &quot;Host: webapp.istioinaction.io&quot; http://$EXT_IP/api/catalog -v
*   Trying 172.19.255.101:80...
* Connected to 172.19.255.101 (172.19.255.101) port 80
&amp;gt; GET /api/catalog HTTP/1.1
&amp;gt; Host: webapp.istioinaction.io
&amp;gt; User-Agent: curl/8.7.1
&amp;gt; Accept: */*
&amp;gt; 
* Request completely sent off
&amp;lt; HTTP/1.1 401 Unauthorized
&amp;lt; www-authenticate: Basic realm=istio
&amp;lt; date: Sat, 24 May 2025 17:10:14 GMT
&amp;lt; server: istio-envoy
&amp;lt; content-length: 0
&amp;lt; 
* Connection #0 to host 172.19.255.101 left intact

# 자격 증명으로 테스트
docker exec -it mypc curl -s -H &quot;Authorization: Basic YWRtaW4zOmFkbWluMw==&quot; -H &quot;Host: webapp.istioinaction.io&quot; http://$EXT_IP/api/catalog -v
...
&amp;lt; HTTP/1.1 200 OK
&amp;lt; content-length: 357
&amp;lt; content-type: application/json; charset=utf-8
&amp;lt; date: Sat, 24 May 2025 17:10:38 GMT
&amp;lt; x-envoy-upstream-service-time: 4
&amp;lt; server: istio-envoy
&amp;lt; 
* Connection #0 to host 172.19.255.101 left intact
[{&quot;id&quot;:1,&quot;color&quot;:&quot;amber&quot;,&quot;department&quot;:&quot;Eyewear&quot;,&quot;name&quot;:&quot;Elinor Glasses&quot;,&quot;price&quot;:&quot;282.00&quot;},{&quot;id&quot;:2,&quot;color&quot;:&quot;cyan&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Atlas Shirt&quot;,&quot;price&quot;:&quot;127.00&quot;},{&quot;id&quot;:3,&quot;color&quot;:&quot;teal&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Small Metal Shoes&quot;,&quot;price&quot;:&quot;232.00&quot;},{&quot;id&quot;:4,&quot;color&quot;:&quot;red&quot;,&quot;department&quot;:&quot;Watches&quot;,&quot;name&quot;:&quot;Red Dragon Watch&quot;,&quot;price&quot;:&quot;232.00&quot;}]%   &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380f09733fa91635ee4d0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23809da390ed1d156cc77a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;실습 완료 후 리소스 삭제&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c238021a38ee142c174f89d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;gauss&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl delete WasmPlugin -n istio-system basic-auth
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c23805a8196c5e81baf2cd6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c23805aa566c8c1d17761ff&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt; 에 Coraza (&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;코라자&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;) WAF 적용 -&lt;/span&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://beer1.tistory.com/60&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;KrBlog&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238032b3a7f1782a32eb75&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Coraza&lt;/span&gt; is an&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; open source&lt;/span&gt;, high performance, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Web Application Firewall&lt;/span&gt; ready to protect your beloved applications - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://coraza.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Home&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://owasp.org/www-project-coraza-web-application-firewall/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380889a3ec9e5f76d5605&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Go 언어로 작성되었으며, ModSecurity SecLang 규칙 세트를 지원하고 OWASP 핵심 규칙 세트와 100% 호환됩니다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380b3bf40e780873fb588&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;⇲&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Drop-in&lt;/span&gt;&amp;nbsp;- Coraza는 부분 호환성이 있는 대체 엔진입니다.&lt;del style=&quot;box-sizing: border-box;&quot;&gt;트러스트웨이브&lt;/del&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/owasp-modsecurity/modsecurity/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;OWASP ModSecurity 엔진을&lt;/a&gt;&amp;nbsp;지원하며 업계 표준 SecLang 규칙 세트를 지원합니다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380c8877ffc151c9a8fc2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt; &amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;보안&lt;/span&gt;&amp;nbsp;- Coraza는&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://coreruleset.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;OWASP CRS를&lt;/a&gt;&amp;nbsp;실행하여 OWASP Top Ten을 포함한 다양한 공격으로부터 웹 애플리케이션을 최소한의 오탐으로 보호합니다. CRS는 SQL 인젝션(SQLi), 크로스 사이트 스크립팅(XSS), PHP 및 Java 코드 인젝션, HTTPoxy, Shellshock, 스크립팅/스캐너/봇 탐지, 메타데이터 및 오류 유출 등 다양한 일반적인 공격 유형을 차단합니다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380f58e2fd65b3f4864fb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt; &amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;확장성&lt;/span&gt;&amp;nbsp;- Coraza는 핵심 라이브러리로, 온프레미스 웹 애플리케이션 방화벽 인스턴스를 구축하기 위한 다양한 통합 기능을 제공합니다. 감사 로거, 지속성 엔진, 연산자, 액션 등 Coraza를 원하는 대로 확장할 수 있는 자체 기능을 생성하세요.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380c19b3cd7ef4cf51df3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt; &amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;성능&lt;/span&gt;&amp;nbsp;- 대규모 웹사이트부터 소규모 블로그까지, Coraza는 성능 저하를 최소화하면서 부하를 처리할 수 있습니다.&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://coraza.io/docs/reference/benchmarks&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;벤치마크를 확인해 보세요.&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23805ab1ccd5da6bd36d3a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;﹡&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;단순성&lt;/span&gt;&amp;nbsp;- 누구나 Coraza 소스 코드를 이해하고 수정할 수 있습니다. 새로운 기능으로 Coraza를 쉽게 확장할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380b09402fcb363567083&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/4f77d7aa-ddc7-4b82-9d40-682b9eb3df9d/image/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/4f77d7aa-ddc7-4b82-9d40-682b9eb3df9d/image/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/4f77d7aa-ddc7-4b82-9d40-682b9eb3df9d/image/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;554.1052631578948&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23800fab1bcf90f703c801&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;플러그인 지원&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380b98ceac6bde1670ca2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/corazawaf/coraza-proxy-wasm&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Proxy WASM extension&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;nbsp;for proxies with proxy-wasm support (e.g. Envoy) - stable, still under development&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23808a8e10dc4a14435484&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/corazawaf/coraza-caddy&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Caddy Reverse Proxy and Webserver Plugin&lt;/a&gt;&amp;nbsp;- stable, needs a maintainer&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238041b87ee5379790e8cd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/corazawaf/coraza-spoa&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;HAProxy SPOE Plugin&lt;/a&gt;&amp;nbsp;- preview&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380e18881c9403a1fdb58&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/jptosso/coraza-traefik&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Traefik Proxy Plugin&lt;/a&gt;&amp;nbsp;- preview, needs maintainer&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23800abbcae1a6309c97d8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/jptosso/coraza-gin&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Gin Web Framework Middleware&lt;/a&gt;&amp;nbsp;- preview, needs maintainer&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23806a91eed97362fc6d56&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/corazawaf/coraza-server&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Apache HTTP Server&lt;/a&gt;&amp;nbsp;- experimental&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380a2a58aff0363f5af67&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/corazawaf/coraza-server&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Nginx&lt;/a&gt;&amp;nbsp;- experimental&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23802baeb3c8307765f9aa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/corazawaf/libcoraza&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Coraza C Library&lt;/a&gt;&amp;nbsp;- experimental&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380a894c4dc43ecbabe1e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Quick Start - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://coraza.io/docs/tutorials/quick-start/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380138d16fe064fda256f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;OWASP Core Ruleset - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://coraza.io/docs/tutorials/coreruleset/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380f6b396d530a9ebee58&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Playground - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://playground.coraza.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23808284affedc59b39ca4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;추천 영상&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23801cafe8fb69f455d057&quot; class=&quot;notion-embed&quot; style=&quot;box-sizing: border-box; width: 1052px; align-self: center;&quot;&gt;
&lt;div class=&quot;notion-embed__content&quot; style=&quot;box-sizing: border-box; display: flex; position: relative;&quot;&gt;
&lt;div class=&quot;notion-embed__container__wrapper align-start&quot; style=&quot;box-sizing: border-box; width: 1052px; display: flex; justify-content: start; padding-bottom: 297px;&quot;&gt;
&lt;div class=&quot;notion-embed__container&quot; style=&quot;box-sizing: border-box; position: absolute; min-height: 100px; max-width: 100%; height: 297px; margin: 0px auto; width: 528px;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/SCEZGRvcxc8?rel=0&quot; width=&quot;300&quot; height=&quot;225&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380b0b1e5d5e2eb9e7b0c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380b0aabac51df4c304ea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;proxy-wasm filter based on Coraza WAF&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/corazawaf/coraza-proxy-wasm/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Github&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238088a550c65d65c2ee01&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/corazawaf/coraza&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Coraza&lt;/a&gt;&amp;nbsp;기반으로 구축되고&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/proxy-wasm/spec&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;proxy-wasm ABI를&lt;/a&gt;&amp;nbsp;구현하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;웹 애플리케이션 방화벽 WASM 필터&lt;/span&gt;입니다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238065ae81d09443a4061b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Envoy에서 직접 로드&lt;/span&gt;하거나&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; Istio 플러그인&lt;/span&gt;으로 사용할 수도 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23808dbb80c95c675273db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;WAF는 플러그 앤 플레이 방식의 보안 솔루션이 아닙니다. WAF가 효과적으로 작동하려면 보호하려는 환경과 트래픽에 맞춰 구성 및 튜닝이 필요합니다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238096be91f4500ba0d96e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실제 운영 환경에서는 배포된 구성(&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/corazawaf/coraza-proxy-wasm/blob/main/wasmplugin/rules/coraza.conf-recommended.conf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;@recommended-conf&lt;/a&gt;&amp;nbsp;및&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/corazawaf/coraza-proxy-wasm/blob/main/wasmplugin/rules/crs-setup.conf.example&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;@crs-setup-conf&lt;/a&gt;&amp;nbsp;참조 )을 완전히 숙지하고 사용된 규칙 세트에 대한 튜닝 단계를 수행하는 것이 좋습니다.&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23806d9c9ed61a32cd02c8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;OWASP 핵심 규칙 세트(CRS) 튜닝에 대한 자세한 내용은 &quot;&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://coreruleset.org/docs/concepts/false_positives_tuning/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;False Positives and Tuning&quot;&lt;/a&gt;&amp;nbsp;가이드를 참조하십시오.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380f49946f0fcd6b8fb51&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380eb90d9dc15cf5ca031&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio WasmPlugin 설정&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c238019b798d83ff52294ab&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;properties&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl apply -f - &amp;lt;&amp;lt;EOF
apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: coraza-ingressgateway
  namespace: istio-system
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  url: oci://ghcr.io/corazawaf/coraza-proxy-wasm
  phase: AUTHN
  pluginConfig:
    default_directives: default
    directives_map:
      default:
      - Include @demo-conf
      - SecDebugLogLevel 9
      - SecRuleEngine On
      - Include @crs-setup-conf
      - Include @owasp_crs/*.conf
EOF

#
kubectl logs -n istio-system -l app=istio-ingressgateway | grep -i wasm 
2025-05-24T17:11:53.979886Z     info    wasm    fetching image corazawaf/coraza-proxy-wasm from registry ghcr.io with tag latest

#
kubectl get WasmPlugin -A
NAMESPACE      NAME                    AGE
istio-system   coraza-ingressgateway   9s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380f78b98ffd800888bee&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380a48ba9dee165cb4793&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;동작 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23807e9041e38e041c1d1b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; dynamic-range-limit: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; print-color-adjust: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;markdown&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
curl -s http://webapp.istioinaction.io:30000/api/catalog

# XSS (Cross-Site Scripting) 공격 시도 : REQUEST-941-APPLICATION-ATTACK-XSS
curl -s 'http://webapp.istioinaction.io:30000/api/catalog?arg=&amp;lt;script&amp;gt;alert(0)&amp;lt;/script&amp;gt;' -IL
HTTP/1.1 403 Forbidden
date: Sat, 24 May 2025 17:12:18 GMT
server: istio-envoy
transfer-encoding: chunked

# 로그 모니터링
kubectl logs -n istio-system -l app=istio-ingressgateway -f
2025-05-24T17:12:18.930422Z     critical        envoy wasm external/envoy/source/extensions/common/wasm/context.cc:1157 wasm log istio-system.coraza-ingressgateway: [client &quot;192.168.65.1&quot;] Coraza: Access denied (phase 1). Inbound Anomaly Score Exceeded in phase 1 (Total Score: 20) [file &quot;@owasp_crs/REQUEST-949-BLOCKING-EVALUATION.conf&quot;] [line &quot;11347&quot;] [id &quot;949111&quot;] [rev &quot;&quot;] [msg &quot;Inbound Anomaly Score Exceeded in phase 1 (Total Score: 20)&quot;] [data &quot;&quot;] [severity &quot;emergency&quot;] [ver &quot;OWASP_CRS/4.0.0-rc2&quot;] [maturity &quot;0&quot;] [accuracy &quot;0&quot;] [tag &quot;anomaly-evaluation&quot;] [hostname &quot;10.10.0.11&quot;] [uri &quot;/api/catalog?arg=&amp;lt;script&amp;gt;alert(0)&amp;lt;/script&amp;gt;&quot;] [unique_id &quot;BbLvIZIwuFWmGUBEstA&quot;]  thread=31
[2025-05-24T17:12:18.903Z] &quot;HEAD /api/catalog?arg=&amp;lt;script&amp;gt;alert(0)&amp;lt;/script&amp;gt; HTTP/1.1&quot; 403 -  - &quot;-&quot; 0 0 27 - &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;7bd6ec78-f62c-9a5b-9935-59579223c78e&quot; &quot;webapp.istioinaction.io:30000&quot; &quot;-&quot; outbound|80||webapp.istioinaction.svc.cluster.local - 10.10.0.11:8080 192.168.65.1:45222 -

# SQLI phase 2 (reading the body request)
curl -i -X POST 'http://webapp.istioinaction.io:30000/api/catalog' --data &quot;1%27%20ORDER%20BY%203--%2B&quot;
HTTP/1.1 403 Forbidden
date: Sat, 24 May 2025 17:13:02 GMT
server: istio-envoy
content-length: 0

# 로그 모니터링
# 어떤 공격이었는지(SQLI) 로그에서 확인가능!!
kubectl logs -n istio-system -l app=istio-ingressgateway -f
2025-05-24T17:13:02.942570Z     critical        envoy wasm external/envoy/source/extensions/common/wasm/context.cc:1157 wasm log istio-system.coraza-ingressgateway: [client &quot;192.168.65.1&quot;] Coraza: Warning. SQL Injection Attack Detected via libinjection [file &quot;@owasp_crs/REQUEST-942-APPLICATION-ATTACK-SQLI.conf&quot;] [line &quot;8669&quot;] [id &quot;942100&quot;] [rev &quot;&quot;] [msg &quot;SQL Injection Attack Detected via libinjection&quot;] [data &quot;Matched Data: sB1c found within ARGS_POST_NAMES:1' ORDER BY 3--+: 1' ORDER BY 3--+&quot;] [severity &quot;critical&quot;] [ver &quot;OWASP_CRS/4.0.0-rc2&quot;] [maturity &quot;0&quot;] [accuracy &quot;0&quot;] [tag &quot;application-multi&quot;] [tag &quot;language-multi&quot;] [tag &quot;platform-multi&quot;] [tag &quot;attack-sqli&quot;] [tag &quot;paranoia-level/1&quot;] [tag &quot;OWASP_CRS&quot;] [tag &quot;capec/1000/152/248/66&quot;] [tag &quot;PCI/6.5.2&quot;] [hostname &quot;10.10.0.11&quot;] [uri &quot;/api/catalog&quot;] [unique_id &quot;rpdGHRkBcQvvKOcZsYv&quot;][msg_match_1 &quot;SQL Injection Attack Detected via libinjection&quot;] [data_match_1 &quot;Matched Data: sB1c found within ARGS_POST_NAMES:1' ORDER BY 3--+: 1' ORDER BY 3-- &quot;]      thread=32&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238003b022d188afe1040d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c23809a922fc228208fb2f8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c23809dac05c116b0199b9b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스 메트릭 확인 : &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;curl -s localhost:8082/stats/prometheus | grep waf_filter&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380109950fac38a21f4d5&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px; color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/70e36361-ff9d-43f9-a8cd-f6c9da6dc0c7/CleanShot_2025-05-18_at_18.46.05/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/70e36361-ff9d-43f9-a8cd-f6c9da6dc0c7/CleanShot_2025-05-18_at_18.46.05/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/70e36361-ff9d-43f9-a8cd-f6c9da6dc0c7/CleanShot_2025-05-18_at_18.46.05/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;360.5350734094617&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380bda5a9cb12a1ce6888&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380d5bf4efc7bcae9dfc7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;참고 영상&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380ee9733c65727285d72&quot; class=&quot;notion-embed&quot; style=&quot;box-sizing: border-box; width: 1080px; align-self: center;&quot;&gt;
&lt;div class=&quot;notion-embed__content&quot; style=&quot;box-sizing: border-box; display: flex; position: relative;&quot;&gt;
&lt;div class=&quot;notion-embed__container__wrapper align-start&quot; style=&quot;box-sizing: border-box; width: 1080px; display: flex; justify-content: start; padding-bottom: 324px;&quot;&gt;
&lt;div class=&quot;notion-embed__container&quot; style=&quot;box-sizing: border-box; position: absolute; min-height: 100px; max-width: 100%; height: 324px; margin: 0px auto; width: 576px;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/QJJBYOKKui0?rel=0&quot; width=&quot;300&quot; height=&quot;225&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c23803fab4ee5e3c506a71a&quot; class=&quot;notion-embed&quot; style=&quot;box-sizing: border-box; width: 1080px; align-self: center;&quot;&gt;
&lt;div class=&quot;notion-embed__content&quot; style=&quot;box-sizing: border-box; display: flex; position: relative;&quot;&gt;
&lt;div class=&quot;notion-embed__container__wrapper align-start&quot; style=&quot;box-sizing: border-box; width: 1080px; display: flex; justify-content: start; padding-bottom: 324px;&quot;&gt;
&lt;div class=&quot;notion-embed__container&quot; style=&quot;box-sizing: border-box; position: absolute; min-height: 100px; max-width: 100%; height: 324px; margin: 0px auto; width: 576px;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/47MxrFX1rRg?rel=0&quot; width=&quot;300&quot; height=&quot;225&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c238032a32bd632ea5d9438&quot; class=&quot;notion-embed&quot; style=&quot;box-sizing: border-box; width: 1080px; align-self: center;&quot;&gt;
&lt;div class=&quot;notion-embed__content&quot; style=&quot;box-sizing: border-box; display: flex; position: relative;&quot;&gt;
&lt;div class=&quot;notion-embed__container__wrapper align-start&quot; style=&quot;box-sizing: border-box; width: 1080px; display: flex; justify-content: start; padding-bottom: 324px;&quot;&gt;
&lt;div class=&quot;notion-embed__container&quot; style=&quot;box-sizing: border-box; position: absolute; min-height: 100px; max-width: 100%; height: 324px; margin: 0px auto; width: 576px;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/NE9DvPwgNZc?rel=0&quot; width=&quot;300&quot; height=&quot;225&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c23806db604e76a60ffdcab&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1fdb8b2c1c2380ecb8abfced4ce2d4be&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Summary&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380159361c8fc35b830a6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 내부 아키텍처는 리스너와 필터를 중심으로 구축됐다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Envoy&amp;rsquo;s internal architecture is built around listeners and filters.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23805d9f9be1fe865b9eb1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉시 사용할 수 있는 엔보이 필터가 많다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;There are many out-of-the-box Envoy filters.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c23803f9bc4c2b48529149c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 데이터 플레인(엔보이 프록시)을 확장할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;We can extend Istio&amp;rsquo;s data plane (Envoy proxy).&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c238086909af608f147c294&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 EnvoyFilter 리소스를 사용해 엔보이의 HTTP 필터 구조를 직접 구성하면 더 세밀한 설정이 가능하며, 이스티오의 API로는 노출되지 않는 엔보이의 부분들도 설정할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Envoy&amp;rsquo;s HTTP filter architecture can be configured directly with Istio&amp;rsquo;s EnvoyFilter resource for more fine-grained configuration or to configure aspects of Envoy not exposed by Istio&amp;rsquo;s API.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380188fcfda3a75212a29&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;속도 제한이나 tap 필터 같은 기능으로 서비스 간 통신에서 엔보이의 요청 경로를 확장할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;We can extend Envoy&amp;rsquo;s request path for service-to-service communication with functionality like rate limiting or the tap filter.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1fdb8b2c1c2380d6ab17e0336a616240&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;루아와 웹어셈블리를 사용하면 엔보이를 다시 빌드하지 않고도 데이터 플레인을 고급 수준에서 커스터마이징할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Lua and Wasm are available for more advanced customizations to the data plane without having to rebuild Envoy.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1fdb8b2c1c23808792d1eb4204afd1ef&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1fdb8b2c1c238089abb6e3dd620cded2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;실습 후 kind 삭제&lt;/span&gt; : &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;kind delete cluster --name &lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;myk8s&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt; &amp;amp;&amp;amp; docker rm -f &lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;mypc&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Kubernetes</category>
      <author>ManMan</author>
      <guid isPermaLink="true">https://gylee815.tistory.com/36</guid>
      <comments>https://gylee815.tistory.com/36#entry36comment</comments>
      <pubDate>Sun, 25 May 2025 02:26:56 +0900</pubDate>
    </item>
    <item>
      <title>[IHOS 1기] 6주차 - 운영, 튜닝</title>
      <link>https://gylee815.tistory.com/35</link>
      <description>&lt;p id=&quot;block-1f6b8b2c1c2380bb97cdd24aea036d06&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.0 데이터 플레인 트러블 슈팅하기&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c98c22f0e2d2148f73&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;This chapter covers&lt;/code&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Troubleshooting the data plane&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380cf8f14e67fa1e4bae9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;잘못 설정한 워크로드 트러블슈팅하기 &lt;i&gt;Troubleshooting a misconfigured workload&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380149f35d3002653e6d7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istioctl과 키알리로 잘못된 설정 감지 및 방지하기 &lt;i&gt;Detecting and preventing misconfigurations using istioctl and Kiali&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803394dce4323bc3d37f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istioctl을 사용해 서비스 프록시 설정 조사하기 &lt;i&gt;Using istioctl to investigate the service proxy configuration&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380fda40af31d99b9e66e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 로그 이해하기 &lt;i&gt;Making sense of Envoy logs&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238048a0ddc91485eb5031&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;텔레메트리를 사용해 앱에 대한 통찰력 얻기 &lt;i&gt;Using telemetry to gain insights into apps&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238026ac1ef25b43d90ae4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;들어가며* : &lt;/span&gt;데이터 플레인 문제 해결&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23805fb013e810d7c47bbf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;잘 알다시피 네트워크를 통해 통신할 때는 많은 것이 잘못될 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380958551fe15ab57bb37&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 존재하는 주요 이유는 무언가 잘못됐을 때 네트워크 통신을 조명하고 타임아웃, 재시도, 서킷 브레이커 같은 복원 기능을 배치함으로써 애플리케이션이 네트워크 문제에 자동으로 대응할 수 있도록 하기 위함이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802d9fe1e88b2970602c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 프록시는 네트워크에서 일어나는 일을 매우 자세히 보여주지만, 프록시 자신이 예기치 못하게 작동하면 어떻게 될까?&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380898de6f05883b356c4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 10.1은 요청 처리에 참여하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;구성 요소&lt;/span&gt;들을 보여준다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801eb731fef51d17ee5d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 플레인&lt;/span&gt;이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;원하는 상태&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;desired state&lt;/span&gt; 로 동기화되도록 보장한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801d9c44e97a57fdb1f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인그레스 게이트웨이&lt;/span&gt;. 트래픽을 클러스터로 허용한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380738f80d0f19487a776&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 프록시&lt;/span&gt;, 접근 제어 기능을 제공하고, 다운스트림에서 로컬 애플리케이션으로 흐르는 트래픽을 처리한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804a9f08d5f24f58704a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션&lt;/span&gt; 그 자체, 요청을 처리하고, 또 다른 업스트림 서비스로 체인을 이어나가는 다른 서비스에 요청하는 것 등을 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380198335f4069ab45a9a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/db7ba8ac-8aa7-4e71-9a0d-22e708da34f9/CleanShot_2025-05-09_at_09.39.27.png?table=block&amp;amp;id=1f6b8b2c-1c23-8019-8335-f4069ab45a9a&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=tlp8fR3iUKxi9PLjDG65YsCG2k7VnO14O6tbcGeCE_Q&quot; alt=&quot;요청을 라우팅하는 데 참여하는 구성 요소들&quot; width=&quot;690&quot; height=&quot;463.00000000000006&quot; /&gt;요청을 라우팅하는 데 참여하는 구성 요소들&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802792b3db5f903b3d71&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서 예기치 못한 문제는 이 체인의 어떤 구성 요소와도 관련 있을 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809bb6c7d02d125f9956&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;모든 구성 요소를 디버깅하는 것은 시간이 많이 필요한데, 앱이 클러스터나 시스템 전체에 영향을 줄 때는 그럴 시간이 없다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238047a277eeed6d253c2e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 장에서는 오류 시나리오를 해결하기 위해 프록시와 관련 설정을 살펴보는 도구를 활용해본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23801caa5ddaddcbbb086f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380f28c73cd6e7f0195be&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380428713fcbcbbe1c048&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.0.1. [실습 환경 구성] &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;k8s(1.23.17) 배포&lt;/span&gt; : NodePort(&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;30000&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;30005&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTPS&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380aaa88befd061f9ac61&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
git clone https://github.com/AcornPublishing/istio-in-action
cd istio-in-action/book-source-code-master
pwd # 각자 자신의 pwd 경로
code .

# 아래 extramounts 생략 시, myk8s-control-plane 컨테이너 sh/bash 진입 후 직접 git clone 가능
kind create cluster --name myk8s --image kindest/node:v1.23.17 --config - &amp;lt;&amp;lt;EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000 # Sample Application (istio-ingrssgateway) HTTP
    hostPort: 30000
  - containerPort: 30001 # Prometheus
    hostPort: 30001
  - containerPort: 30002 # Grafana
    hostPort: 30002
  - containerPort: 30003 # Kiali
    hostPort: 30003
  - containerPort: 30004 # Tracing
    hostPort: 30004
  - containerPort: 30005 # Sample Application (istio-ingrssgateway) HTTPS
    hostPort: 30005
  - containerPort: 30006 # TCP Route
    hostPort: 30006
  - containerPort: 30007 # kube-ops-view
    hostPort: 30007
  extraMounts: # 해당 부분 생략 가능
  - hostPath: /Users/gasida/Downloads/istio-in-action/book-source-code-master # 각자 자신의 pwd 경로로 설정
    containerPath: /istiobook
networking:
  podSubnet: 10.10.0.0/16
  serviceSubnet: 10.200.0.0/22
EOF

# 설치 확인
docker ps

# 노드에 기본 툴 설치
docker exec -it myk8s-control-plane sh -c 'apt update &amp;amp;&amp;amp; apt install tree psmisc lsof wget bridge-utils net-tools dnsutils tcpdump ngrep iputils-ping git vim -y'

# (옵션) kube-ops-view
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30007 --set env.TZ=&quot;Asia/Seoul&quot; --namespace kube-system
kubectl get deploy,pod,svc,ep -n kube-system -l app.kubernetes.io/instance=kube-ops-view

## kube-ops-view 접속 URL 확인
open &quot;http://localhost:30007/#scale=1.5&quot;
open &quot;http://localhost:30007/#scale=1.3&quot;

# (옵션) metrics-server
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm install metrics-server metrics-server/metrics-server --set 'args[0]=--kubelet-insecure-tls' -n kube-system
kubectl get all -n kube-system -l app.kubernetes.io/instance=metrics-server
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238070ab03f1afb241cf0a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807ab8e1c2c36e959660&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.0.2. [실습 환경 구성] &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio 1.17.8 설치&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/setup/install/istioctl/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Install&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/setup/additional-setup/config-profiles/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;profile&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c48d7ada2bfb5f48ea&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# myk8s-control-plane 진입 후 설치 진행
docker exec -it myk8s-control-plane bash
-----------------------------------
# (옵션) 코드 파일들 마운트 확인
tree /istiobook/ -L 1
혹은
git clone ... /istiobook

# istioctl 설치
export ISTIOV=1.17.8
echo 'export ISTIOV=1.17.8' &amp;gt;&amp;gt; /root/.bashrc

curl -s -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIOV sh -
cp istio-$ISTIOV/bin/istioctl /usr/local/bin/istioctl
istioctl version --remote=false

# demo 프로파일 컨트롤 플레인 배포
istioctl install --set profile=demo --set values.global.proxy.privileged=true -y

# 보조 도구 설치
kubectl apply -f istio-$ISTIOV/samples/addons

# 빠져나오기
exit
-----------------------------------

# 설치 확인 : istiod, istio-ingressgateway, crd 등
kubectl get istiooperators -n istio-system -o yaml
kubectl get all,svc,ep,sa,cm,secret,pdb -n istio-system
kubectl get cm -n istio-system istio -o yaml
kubectl get crd | grep istio.io | sort

# 실습을 위한 네임스페이스 설정
kubectl create ns istioinaction
kubectl label namespace istioinaction istio-injection=enabled
kubectl get ns --show-labels

# istio-ingressgateway 서비스 : NodePort 변경 및 nodeport 지정 변경 , externalTrafficPolicy 설정 (ClientIP 수집)
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 8080, &quot;nodePort&quot;: 30000}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 443, &quot;targetPort&quot;: 8443, &quot;nodePort&quot;: 30005}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;:{&quot;externalTrafficPolicy&quot;: &quot;Local&quot;}}'
kubectl describe svc -n istio-system istio-ingressgateway

# NodePort 변경 및 nodeport 30001~30003으로 변경 : prometheus(30001), grafana(30002), kiali(30003), tracing(30004)
kubectl patch svc -n istio-system prometheus -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 9090, &quot;targetPort&quot;: 9090, &quot;nodePort&quot;: 30001}]}}'
kubectl patch svc -n istio-system grafana -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 3000, &quot;targetPort&quot;: 3000, &quot;nodePort&quot;: 30002}]}}'
kubectl patch svc -n istio-system kiali -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 20001, &quot;targetPort&quot;: 20001, &quot;nodePort&quot;: 30003}]}}'
kubectl patch svc -n istio-system tracing -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 16686, &quot;nodePort&quot;: 30004}]}}'

# Prometheus 접속 : envoy, istio 메트릭 확인
open http://127.0.0.1:30001

# Grafana 접속
open http://127.0.0.1:30002

# Kiali 접속 1 : NodePort
open http://127.0.0.1:30003

# (옵션) Kiali 접속 2 : Port forward
kubectl port-forward deployment/kiali -n istio-system 20001:20001 &amp;amp;
open http://127.0.0.1:20001

# tracing 접속 : 예거 트레이싱 대시보드
open http://127.0.0.1:30004
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380f19b0cf9f41e132c87&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380068eeece29ba1ab5ee&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1f6b8b2c1c2380268260dc573e95b700&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;10.1. 가장 흔한 실수: 잘못 설정한 데이터 플레인&lt;/p&gt;
&lt;p id=&quot;block-1f6b8b2c1c23803a8229ffd0e5d04d3d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://netpple.github.io/docs/istio-in-action/Istio-ch10-troubleshooting&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://netpple.github.io/docs/istio-in-action/Istio-ch10-troubleshooting&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380cc8cc0c5c4db466c05&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;The most common mistake: A misconfigured data plane : 환경 설정하기 &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습~)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d3932ced4d370cfd01&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오&lt;/span&gt;는 서비스 프록시 설정을 사람이 읽을 수 있는 형식인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VirtualService&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DestinationRule&lt;/span&gt; 등과 같은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CRD&lt;/span&gt;로 누출한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238051b888cf1f6d98b129&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 리소스들은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 설정&lt;/span&gt;으로 변환돼 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 플레인&lt;/span&gt;에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;적용&lt;/span&gt;된다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238019b20de12a3614d288&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;새 리소스를 적용한 후 데이터 플레인의 동작이 예상과 다를 때 가장 일반적인 원인은 우리가 설정을 잘못한 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238031b58fee55fa9040b0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238038b4b0c6a3d0956f47&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;데이터 플레인을 잘못 설정했을 때 트러블슈팅하는 방법을 보여주기 위해 다음 예제를 준비한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801c8074e64c046df051&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 인그레스 게이트웨이로 트래픽을 허용하는 Gateway 리소스와 그림 10.2처럼 요청 중 20% 부분집합 version-v1으로, 나머지 80%를 version-v2로 라우팅하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VirtualService&lt;/span&gt;리소스를 사용할 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238086b6f1f220ec7bff8d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/0d468af2-c479-4edb-8311-84b331a68c19/CleanShot_2025-05-09_at_10.39.51.png?table=block&amp;amp;id=1f6b8b2c-1c23-8086-b6f1-f220ec7bff8d&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=G3PQpomitSVRJkG6athvnMurGwe71OGF7qsW0JocQbQ&quot; alt=&quot;image&quot; width=&quot;560.9658813476562&quot; height=&quot;391.97615951565285&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238015ad09e5bb3f5c8b8a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e380b7e187f227ee73&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&amp;lsquo;여기까지는 괜찮다&amp;rsquo;고 생각할 수 있지만, 그렇지 않다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802f9a4ad970a3b6bac9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DestinationRule&lt;/span&gt; 리소스가 없으면 인그레스 게이트웨이는 부분집합 version-v1과 version-v2에 대한 클러스터 정의가 없으므로, 모든 요청은 실패할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380179f5ce67087f35f52&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 트러블슈팅을 해보기에 좋은 문제다!&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b6845ac5c5e0fa90dd&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804daf5cd65e1b1c5987&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;먼저 이스티오는 배포했지만 (2장 참조) 다른 애플리케이션 구성 요소는 배포해두지 않았다고 해보자.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f1a5bacf5de8eee0c8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞 장들부터 계속해오고 있다면, 다음과 같이 남아 있는 Deployment, Service, Gateway, VirtualService 를 정리 후 샘플 애플리케이션 배포하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c59020ef229c5be6e3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 샘플 애플리케이션 배포
kubectl apply -f services/catalog/kubernetes/catalog.yaml -n istioinaction # catalog v1 배포
kubectl apply -f ch10/catalog-deployment-v2.yaml -n istioinaction # catalog v2 배포
kubectl apply -f ch10/catalog-gateway.yaml -n istioinaction # catalog-gateway 배포
kubectl apply -f ch10/catalog-virtualservice-subsets-v1-v2.yaml -n istioinaction

# Gateway 
cat ch10/catalog-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: catalog-gateway
  namespace: istioinaction
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - &quot;catalog.istioinaction.io&quot;
    port:
      number: 80
      name: http
      protocol: HTTP

# VirtualService
cat ch10/catalog-virtualservice-subsets-v1-v2.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: catalog-v1-v2
  namespace: istioinaction
spec:
  hosts:
  - &quot;catalog.istioinaction.io&quot;
  gateways:
  - &quot;catalog-gateway&quot;
  http:
  - route:
    - destination:
        host: catalog.istioinaction.svc.cluster.local
        subset: version-v1
        port:
          number: 80
      weight: 20
    - destination:
        host: catalog.istioinaction.svc.cluster.local
        subset: version-v2
        port:
          number: 80
      weight: 80

# 확인
kubectl get deploy,svc -n istioinaction
kubectl get gw,vs -n istioinaction 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a880eaf846d0178b92&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380c58bb5cc5844c2e41b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;통신 확인 : 부분집합 설정 누락으로 503 &amp;lsquo;Service Unavailable&amp;rsquo; 출력 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Envoy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803d9eecd1b23c3cdab8&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 로그 확인 : NC - NoClusterFound : Upstream cluster not found.
kubectl logs -n istio-system -l app=istio-ingressgateway -f
[2025-05-09T01:54:51.145Z] &quot;GET /items HTTP/1.1&quot; 503 NC cluster_not_found - &quot;-&quot; 0 0 0 - &quot;172.18.0.1&quot; &quot;curl/8.7.1&quot; &quot;90a7d941-cbc4-91ae-9da1-bc95695d5c50&quot; &quot;catalog.istioinaction.io:30000&quot; &quot;-&quot; - - 10.10.0.7:8080 172.18.0.1:64130 - -

# 반복 호출 시도
for i in {1..100}; do curl http://catalog.istioinaction.io:30000/items -w &quot;\nStatus Code %{http_code}\n&quot;; sleep .5;  done
Status Code 503&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23805ca9cdc78360ca28ab&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Envoy response flag&lt;/span&gt;&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23806381eef6fbe5180d53&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238047b5a2e493d53b550c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23804e9951c4d6c1914d15&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;10.2. 데이터 플레인 문제 식별하기&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1f6b8b2c1c23805e808fdef80738e647&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;들어가며&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380488354f46a3206fad4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;일상적인 운영에서는 보통 데이터 플레인 문제를 처리할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802fa54dc0487d1399fe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;바로 데이터 플레인 디버깅에 뛰어드는 습관이 생길 수도 있지만, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;컨트롤 플레인 문제를 추정 원인에서 빠르게 배제하는 것&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이 중요하다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801c95bbd7d82606dbf4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인의 주요 기능이 데이터 플레인을 최신 설정으로 동기화하는 것임을 감안하면, 첫 단계는 컨트롤 플레인과 데이터 플레인이 동기화된 상태인지 확인하는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238066a29dfa8049a8244f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.2.1. 데이터 플레인이 최신 상태인지 확인하는 방법&lt;/span&gt; How to verify that the data plane is up to date&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a5987bc8f56f822837&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 플레인 설정&lt;/span&gt;은 설계상 궁극적으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;일관성&lt;/span&gt;을 가진다. &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The data-plane configuration is &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;eventually consistent&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; by design.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380eeb1c1ff8ff6bd7848&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉, 환경(서비스, 엔드포인트, 상태)이나 설정의 변화는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인과 적절히 동기화하기 전까지는 데이터 플레인에 즉시 반영되지 않는다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a9ad1eca194b027fff&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 앞 장들에서 봤듯이 컨트롤 플레인은 특정 서비스의 개별 엔드포인트 IP 주소를 데이터 플레인으로 보낸다. (서비스 내의 각 파드 IP 주소와 대강 동일)&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809ab5e5d70f532fa2b6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 엔드포인트 중 어느 하나가 비정상이 되면, 쿠버네티스가 이를 인지하고 파드를 비정상으로 표시하는 데 시간이 걸린다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238089b8e9f0547fb2ac6c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어느 시점에 컨트롤 플레인도 문제를 인지하고 엔드포인트를 데이터 플레인에서 제거한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ee9d85c56d3a170862&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서 컨트롤 플레인은 최신 설정으로 돌아오며, 프록시 설정도 다시 일관된 상태가 된다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380639302e6764d0e8851&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 10.3은 데이터 플레인을 업데이트하기 위해 발생하는 이벤트를 시각화한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e38a60c960197649e5&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/bfd1a191-6217-4557-bce0-6657b74892bf/CleanShot_2025-05-09_at_11.20.20.png?table=block&amp;amp;id=1f6b8b2c-1c23-80e3-8a60-c960197649e5&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=BLBk6IQII9500X_S9yniJvjPS207KcbY-lvzc14CG60&quot; alt=&quot;워크로드가 비정상이 된 후 데이터 플레인 구성 요소의 설정이 업데이트될 때까지 일련의 이벤트&quot; width=&quot;912&quot; height=&quot;480.3045685279188&quot; /&gt;워크로드가 비정상이 된 후 데이터 플레인 구성 요소의 설정이 업데이트될 때까지 일련의 이벤트&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238059924ae58a19297467&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kubelet은 주기적으로 노드 내에서 실행 중인 파드의 상태를 확인한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ea8fcdfdb5ff070cbb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;쿠버네티스 API서버는 상태 확인을 실패한 파드를 통보받는다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380fbb21dec2fb0cf1fc9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;API 서버가 모든 이해 당사자들에게 알린다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802ea97af02dfe345744&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istiod가 데이터 플레인을 업데이트해 설정에서 엔드포인트를 제거한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802ca104c841d1f40201&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;건강하지 않은 인스턴스로 더 이상 트래픽을 전송되지 않는다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23808fbcb4fa9e722b7bd7&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 963.047px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1f6b8b2c1c2380da80ddc96d04e3e520&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;워크로드와 이벤트 개수가 늘어나는 대규모 클러스터에서는 데이터 플레인을 동기화하는 데 필요한 시간도 비례해 늘어난다. 대규모 클러스터에서 성능을 개선하는 방법은 11장에서 살펴볼 것이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238027969ad82220472598&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238056b5c3f897fa260b4f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istioctl proxy-status 로 데이터 플레인이 최신 설정과 동기화했는지 확인하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803a8348f1c25bce7d60&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;lsl&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;docker exec -it myk8s-control-plane istioctl proxy-status
NAME                                                   CLUSTER        CDS        LDS        EDS        RDS          ECDS         ISTIOD                    VERSION
catalog-6cf4b97d-qjpbc.istioinaction                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-62sg6     1.17.8
catalog-v2-56c97f6db-868wt.istioinaction               Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-62sg6     1.17.8
catalog-v2-56c97f6db-zsbrf.istioinaction               Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-62sg6     1.17.8
istio-egressgateway-85df6b84b7-qf25w.istio-system      Kubernetes     SYNCED     SYNCED     SYNCED     NOT SENT     NOT SENT     istiod-8d74787f-62sg6     1.17.8
istio-ingressgateway-6bb8fb6549-n8lsc.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-62sg6     1.17.8&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380aaafc3f16973731eaf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SYNCED&lt;/span&gt; : istiod가 보낸 마지막 설정을 엔보이가 확인했다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380739024c73491f7fd11&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;NOT SENT&lt;/span&gt; : istiod가 아무것도 엔보이로 보내지 않았다. 보통은 istiod가 보낼 것이 없기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238073ab6dc46ce1ecf9e8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;STALE&lt;/span&gt; : istiod가 엔보이에 업데이트를 보냈지만 확인받지 못했다. 이는 다음 중 하나를 나타낸다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238081963bf49509982cd8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istiod가 과부하됐거나, 엔보이와 istiod 사이의 커넥션 부족 또는 끊김이거나, 이스티오의 버그다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a8b8c6ecc4170ec5d9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f39295f36193cf634f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그런데 우리의 출력에는 설정을 받지 못한 stale 상태의 워크로드가 없다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380839d03cab1a8431d2f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;따라서 컨트롤 플레인에 문제가 있을 가능성은 낮으므로 데이터 플레인 구성 요소를 조사해&lt;/span&gt;야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801195f6c1635cd12ea0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 플레인 구성 요소에서 가장 일반적인 문제&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;잘못된 워크로드 설정&lt;/span&gt;이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809f82c5d238e9b16ca2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;키알리&lt;/span&gt;를 사용하면 설정을 빠르게 검증할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380ea8893e8c0c9e9cd6e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.2.2. 키알리로 잘못된 설정 발견하기&lt;/span&gt; Discovering misconfigurations with Kiali&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23805ca8f6cffb8c63fce7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;대시보드에 Overview 에 istioinaction 네임스페이스에 경고 표시 확인 &amp;rarr; 클릭 시 Istio Config 로 이동 &amp;rArr; 클릭 시 내장 편집기에서 경고 메시지 확인 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://v1-41.kiali.io/docs/features/validations/#kia1107---subset-not-found&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238065b866f896e2815538&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/bdcad25e-8d2e-4525-b297-44831ae1a15d/CleanShot_2025-05-09_at_12.17.15.png?table=block&amp;amp;id=1f6b8b2c-1c23-8065-b866-f896e2815538&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=NCBVB0pv1NlE9x12n8nos8YfyiRgh3UCtJSPC2DPa1k&quot; alt=&quot;image&quot; width=&quot;816&quot; height=&quot;451.3569482288828&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380328d87f622e82c66a4&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/eab40d4d-5e53-4fb6-ac9b-2dead2760ef0/CleanShot_2025-05-09_at_13.47.10.png?table=block&amp;amp;id=1f6b8b2c-1c23-8032-8d87-f622e82c66a4&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=gD6ehJvnrOiuTgpse56isvD86vVa4GbC1SpdkpLYlcs&quot; alt=&quot;image&quot; width=&quot;816&quot; height=&quot;164.1688654353562&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b1bad7d8a7d91243fb&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/dc8539ad-1e63-4f96-8c58-2326f68a3881/CleanShot_2025-05-09_at_13.48.13.png?table=block&amp;amp;id=1f6b8b2c-1c23-80b1-bad7-d8a7d91243fb&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=SjDsDD0_Kf2KIBS_du6wBXaA7JTNts22kkYiHZ3cLio&quot; alt=&quot;image&quot; width=&quot;816&quot; height=&quot;627.8635743519782&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b78160dc26a332bdd2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238023b125ee6424e0c3d5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;경고 아이콘 위로 마우스를 올리면 경고 메시지 &amp;lsquo;KIA1107 Subnet not found&amp;rsquo;를 보여준다. 자세한 건 키알리 공식 문서 참고 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://v1-41.kiali.io/docs/features/validations/#kia1107---subset-not-found&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238091a160c6c75f6de23c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;존재하지 않은 부분집합을 가리키는 루트를 수정하자. 아마 부분집합 이름의 오타를 수정하거나 DestinationRule 에서 빠트린 부분집합을 정의하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806da978c0e8fc7b6536&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 다음은 KIA1107 경고의 해결책 부분이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238096a225d4426c91d4b9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e79336cd49fac83e5b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;키알리 검증&lt;/span&gt;은 도움이 되므로, 워크로드가 예상대로 동작하지 않을 때 취하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;첫 초지 중 하나&lt;/span&gt;여야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802e8461c2413c3ce12c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 조치는 또 다른 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;검증 모음을 제공&lt;/span&gt;하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istioctl&lt;/span&gt;을 사용하는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380689fabc646382430d9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d78e73e21b847b76a4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.2.3. istioctl로 잘못된 설정 발견하기*&lt;/span&gt;&lt;/span&gt; Discovering misconfigurations with istioctl&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238087aac0e72bda62b107&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;잘못 설정된 워크로드를 자동으로 트러블슈팅하는 데 가장 유용한 istioctl 명령어 두 가지는 istioctl &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;analyze&lt;/span&gt; 와 istioctl &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;describe&lt;/span&gt; 이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c4aa54c55863edd1a6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380dd9fedf5aae4c677e0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;istioctl 로 이스티오 설정 분석하기&lt;/u&gt;&lt;/span&gt; ANALYZING ISTIO CONFIGURATIONS WITH ISTIOCTL&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238067a075df2102fe2032&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istioctl &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;analyze&lt;/span&gt; 명령어는 이스티오 설정을 분석하는 강력한 진단 도구다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238061b87ee3cf9511d627&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이미 문제가 발생한 클러스터에 실행하거나, 리소스를 잘못 구성하는 것을 방지하고자 클러스터에 적용하기 전에 설정이 유효한지 검사할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23802dbd99f1140eeec70d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238025b1c3f92353f6f04d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;analyze 명령어는 여러 분석기를 실행하는데, 각 분석기는 특정 문제를 감지하는 데 특화돼 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380739326f257187b425c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;analyze 명령어는 쉽게 확장할 수 있어 이스티오와 함께 발전할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380289dd6f9bdbb89b67c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;감지된 문제를 살펴보자 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/reference/config/analysis/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;IstioDocs&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/reference/config/analysis/ist0101/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;0101&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380aeabf2e0425db0fd94&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;subunit&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
docker exec -it myk8s-control-plane istioctl analyze -h
docker exec -it myk8s-control-plane istioctl analyze --list-analyzers
...
docker exec -it myk8s-control-plane istioctl analyze -n istioinaction
Error [IST0101] (VirtualService istioinaction/catalog-v1-v2) Referenced host+subset in destinationrule not found: &quot;catalog.istioinaction.svc.cluster.local+version-v1&quot;
Error [IST0101] (VirtualService istioinaction/catalog-v1-v2) Referenced host+subset in destinationrule not found: &quot;catalog.istioinaction.svc.cluster.local+version-v2&quot;
Error: Analyzers found issues when analyzing namespace: istioinaction.
See https://istio.io/v1.17/docs/reference/config/analysis for more information about causes and resolutions.

# 이전 명령어 종료 코드 확인
echo $? # (참고) 0 성공
79
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380acba0ef7f201b0639b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;출력은 부분집합을 찾지 못했음을 보여준다. 오류 메시지 외에 istio 오류 코드 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;IST0101&lt;/code&gt; 도 제공 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/reference/config/analysis/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;IstioDocs&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/reference/config/analysis/ist0101/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;0101&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238007939bd165df9117fe&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a78f8efffc27acdfad&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;워크로드별로 설정 오류 찾기&lt;/u&gt;&lt;/span&gt; DETECTING WORKLOAD-SPECIFIC MISCONFIGURATIONS&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238042bfddd8dd03ac98a2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;describe는 워크로드별 설정을 기술하는데 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380558ceae0ae13aa6daf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;describe는 워크로드 하나에 직간접적으로 영향을 미치는 이스티오 설정을 분석해 요약 내용을 출력한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380749814d14d12255e67&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 요약은 다음과 같은 워크로드 관련 질문에 답변을 제공한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23807e9df1fb7e26aedcdd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 워크로드는 서비스 메시의 일부인가?&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800f883ee0fe0fe78de6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어떤 VirtualService 와 DestinationRule 이 적용되는가?&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f59764f250d387d1aa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;상호 인증 트래픽을 요구하는가?&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238027ac16e516bd61e539&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380388d9bc41432c9a07d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실행해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e9a071db7db37bca84&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl get pod -n istioinaction -l app=catalog -o jsonpath='{.items[0].metadata.name}'
CATALOG_POD1=$(kubectl get pod -n istioinaction -l app=catalog -o jsonpath='{.items[0].metadata.name}')

# 단축키 : experimental(x), describe(des)
docker exec -it myk8s-control-plane istioctl experimental describe -h
docker exec -it myk8s-control-plane istioctl x des pod -n istioinaction $CATALOG_POD1
Pod: catalog-6cf4b97d-qjpbc
   Pod Revision: default
   Pod Ports: 3000 (catalog), 15090 (istio-proxy)
--------------------
Service: catalog
   Port: http 80/HTTP targets pod port 3000
--------------------
Effective PeerAuthentication:
   Workload mTLS mode: PERMISSIVE


Exposed on Ingress Gateway http://172.19.0.2
VirtualService: catalog-v1-v2
   WARNING: No destinations match pod subsets (checked 1 HTTP routes)
      Warning: Route to subset version-v1 but NO DESTINATION RULE defining subsets!
      Warning: Route to subset version-v2 but NO DESTINATION RULE defining subsets!


# 문제 해결 후 확인
cat ch10/catalog-destinationrule-v1-v2.yaml       
kubectl apply -f ch10/catalog-destinationrule-v1-v2.yaml
docker exec -it myk8s-control-plane istioctl x des pod -n istioinaction $CATALOG_POD1
Pod: catalog-6cf4b97d-qjpbc
   Pod Revision: default
   Pod Ports: 3000 (catalog), 15090 (istio-proxy)
--------------------
Service: catalog
   Port: http 80/HTTP targets pod port 3000
DestinationRule: catalog for &quot;catalog.istioinaction.svc.cluster.local&quot;
   Matching subsets: version-v1
      (Non-matching subsets version-v2)
   No Traffic Policy
--------------------
Effective PeerAuthentication:
   Workload mTLS mode: PERMISSIVE


Exposed on Ingress Gateway http://172.19.0.2
VirtualService: catalog-v1-v2
   Weight 20%

# 다음 점검 방법을 위해 오류 상황으로 원복
kubectl delete -f ch10/catalog-destinationrule-v1-v2.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380ca9a5eee5623f77a5d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380eea4fee60632ffd01e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;하위 명령어 analyze 와 describe 모두 설정에서 흔한 오류를 식별하느 데 도움이 되며, 보통은 해결책을 제시하기에 충분한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802abacaf731ecf833d0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 명령어로 드러나지 않은 문제나 해결 지침을 충분히 제공하지 않은 문제는 더 깊이 파고들 필요가 있다. 그것은 다음 절에서 할 일이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380899494e6ed1aa0550d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a29778dddf0ea68ca1&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;10.2.4. istioctl &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;analyze&lt;/span&gt;와 istioctl &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;describe&lt;/span&gt;를 CI/CD 파이프라인에서 istio 설정 검증 활용 해보기&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380fab73bffccca38458b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;명령어 활용 예시&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23800e822efc614c0ded94&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 로컬 YAML 파일 검증
istioctl analyze --use-kube=false samples/bookinfo/networking/bookinfo-gateway.yaml

# 라이브 클러스터와 YAML 파일 조합 검증
istioctl analyze samples/bookinfo/networking/bookinfo-gateway.yaml samples/bookinfo/networking/destination-rule-all.yaml

# 특정 경고 억제
istioctl analyze --namespace default --suppress &quot;IST0102=Namespace default&quot;

# 모든 네임스페이스 분석
istioctl analyze --all-namespaces

# 디렉토리 내 모든 YAML 파일 분석
istioctl analyze --recursive my-istio-config/&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238044a0a5f1908f99f70f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23808eb198f33d32a5d8af&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;GitHub Actions 예시 (GPT/Grok3 답변으로 실습 확인은 못해보았습니다)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238020ac8cd6122412b32c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;http&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;name: Istio YAML 분석

on:
  push:
    paths:
      - 'istio-configs/**.yaml'
  pull_request:

jobs:
  istio-analyze:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3

    - name: Install istioctl
      run: |
        curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.22.0 sh -
        export PATH=&quot;$PATH:./istio-1.22.0/bin&quot;
        echo &quot;PATH=$PATH:./istio-1.22.0/bin&quot; &amp;gt;&amp;gt; $GITHUB_ENV

    - name: Run istioctl analyze
      run: |
        # --use-kube=false를 지정하면 클러스터 없이도 로컬 파일만으로 분석 가능
        istioctl analyze ./istio-configs --use-kube=false --output json &amp;gt; analyze-report.json || true
        cat analyze-report.json

    - name: Fail if issues found
      run: |
        if grep -q '&quot;Level&quot;:&quot;Error&quot;' analyze-report.json; then
          echo &quot;Istio analyze found errors&quot;
          exit 1
        fi&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23801c84efc731b281f3a3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;http&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;name: Istio YAML Validation

on:
  pull_request:
    branches:
      - main

jobs:
  validate-istio:
    runs-on: ubuntu-latest
    steps:
      # 리포지토리 체크아웃
      - name: Checkout code
        uses: actions/checkout@v3

      # Istio 설치
      - name: Install istioctl
        run: |
          curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.25.2 sh -
          mv istio-1.25.2/bin/istioctl /usr/local/bin/
          istioctl version

      # YAML 파일 검증
      - name: Run istioctl analyze
        run: |
          istioctl analyze --use-kube=false ./istio-config/*.yaml
        continue-on-error: false

      # 클러스터 접근 설정 (필요한 경우)
      - name: Setup kubeconfig
        run: |
          echo &quot;${{ secrets.KUBECONFIG }}&quot; &amp;gt; kubeconfig
          export KUBECONFIG=kubeconfig

      # 라이브 클러스터 분석
      - name: Run istioctl analyze with cluster
        run: |
          istioctl analyze ./istio-config/bookinfo-gateway.yaml

      # 파드 구성 확인 (배포 후)
      - name: Run istioctl describe
        run: |
          POD_NAME=$(kubectl get pods -l app=ratings -o jsonpath='{.items[0].metadata.name}')
          istioctl describe pod $POD_NAME&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380ceb318de38f781e720&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800b9d35f8cc0449518c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istioctl describe 사용 : 디버깅용으로 로그 출력에 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238069a7a3f0f6a03a63c0&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;...
- name: Describe Istio service
  run: |
    istioctl x describe svc reviews.default.svc.cluster.local || true&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c2a99bd1d5374aee92&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e0a2fbe14e20b9772c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;GitLab CI 예시&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380119649fd0a76a9fa8a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# .gitlab-ci.yml

stages:
  - lint
  - build
  - deploy

variables:
  ISTIO_VERSION: &quot;1.20.0&quot; # 사용하는 Istio 버전에 맞게 조정

istioctl_analyze:
  stage: lint
  image: 
    name: gcr.io/google.com/cloudsdk/cloud-sdk:latest # kubectl, istioctl이 포함된 이미지 사용 (또는 커스텀 이미지)
    entrypoint: [&quot;&quot;] # Entrypoint를 재정의하여 쉘 스크립트 실행
  before_script:
    # istioctl 다운로드 및 설치 (만약 이미지에 포함되어 있지 않다면)
    - apt-get update &amp;amp;&amp;amp; apt-get install -y curl
    - curl -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIO_VERSION sh -
    - export PATH=$PWD/istio-$ISTIO_VERSION/bin:$PATH
  script:
    - echo &quot;Analyzing Istio YAML files...&quot;
    # 모든 Istio 관련 YAML 파일이 있는 디렉토리를 지정
    # 여기서는 project/istio-config/ 아래에 모든 Istio 설정 파일이 있다고 가정
    - istioctl analyze project/istio-config/
    # 또는 특정 파일만 지정
    # - istioctl analyze project/istio-config/gateway.yaml project/istio-config/virtualservice.yaml
    - if [ $? -ne 0 ]; then
        echo &quot;Istio configuration analysis failed. Please check the reported errors.&quot;
        exit 1
      fi
    - echo &quot;Istio configuration analysis passed.&quot;
  only:
    - merge_requests # PR/MR 시에만 실행
    - main           # main 브랜치 커밋 시에도 실행&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e9a2bceef5eb7b8731&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e2aa9bc160c40582c1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Jenkins 파이프라인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380bf8214c8da18cb3063&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;awk&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;pipeline {
    agent any

    environment {
        ISTIO_VERSION = '1.22.0'
        ISTIOCTL_PATH = &quot;${env.WORKSPACE}/istio-${ISTIO_VERSION}/bin&quot;
    }

    stages {
        stage('Checkout') {
            steps {
                git 'https://your-repo-url.com/your-istio-config-repo.git'
            }
        }

        stage('Install istioctl') {
            steps {
                sh '''
                    curl -L https://istio.io/downloadIstio | ISTIO_VERSION=${ISTIO_VERSION} sh -
                    export PATH=$PATH:${ISTIOCTL_PATH}
                '''
            }
        }

        stage('Run istioctl analyze') {
            steps {
                sh '''
                    export PATH=$PATH:${ISTIOCTL_PATH}
                    istioctl analyze ./istio-configs --use-kube=false --output json &amp;gt; analyze-report.json || true
                    cat analyze-report.json
                    if grep -q '&quot;Level&quot;:&quot;Error&quot;' analyze-report.json; then
                        echo &quot;Istio analyze found errors&quot;
                        exit 1
                    fi
                '''
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23802eaaa7ddf7714083c2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380f098e6fad078dc05c2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1f6b8b2c1c2380709217e1641a302995&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;10.3. 엔보이 설정에서 수동으로 잘못된 설정 발견하기&lt;/p&gt;
&lt;p id=&quot;block-1f6b8b2c1c2380f6bcb9cdf68b0f0de3&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;Discovering misconfigurations manually from the Envoy config 앞 선 방법이 부족 할 때는 엔보이 설정 전체를 수동으로 조사해야 한다.&lt;/p&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807da14dc042c106763a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.3.1 엔보이 관리(admin) 인터페이스&lt;/span&gt; Envoy administration interface&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806a864dda66dece1d85&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 관리 인터페이스는 프록시의 특정 부분(로그 수준 증가 등)을 수정하는 기능과 엔보이 설정을 노출한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380c98c6ceaaed43b87f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 인터페이스는 모든 서비스 프록시에서 포트 15000으로 접근 할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e898aadd62c575d98f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl port-forward deploy/catalog -n istioinaction 15000:15000
open http://localhost:15000

# 현재 적재한 엔보이 설정 출력 : 데이터양이 많다!
curl -s localhost:15000/config_dump | wc -l
  13952&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b195b8f97308f42b27&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/62e717f1-7b4a-4a73-9221-78c31ddfb80b/CleanShot_2025-05-09_at_14.36.08.png?table=block&amp;amp;id=1f6b8b2c-1c23-80b1-95b8-f97308f42b27&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=fJw2I8D4Wj5cKKQ-0KO6rUMLBalivDIZtepYiWZEpb4&quot; alt=&quot;image&quot; width=&quot;720&quot; height=&quot;164.90013315579228&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f2a448d367285214ef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;출력은 너무 커서 기본적으로 사람이 읽을 수 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380439172dae1ffeb1e7b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://www.youtube.com/watch?v=nNTpfXSCLKs&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Ffb7a8a1e-f1be-4c37-abf3-91b4c0b5549f%2FUntitled.png?id=1f6b8b2c-1c23-8043-9172-dae1ffeb1e7b&amp;amp;table=block&quot; alt=&quot;https://www.youtube.com/watch?v=nNTpfXSCLKs&quot; width=&quot;864&quot; height=&quot;495.4285714285714&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c89e13fa6b34854018&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/b91e141e-4eb5-463e-8999-5034520b3952/CleanShot_2025-05-09_at_14.45.50.png?table=block&amp;amp;id=1f6b8b2c-1c23-80c8-9e13-fa6b34854018&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=zXol_qJXZyN8ESlzdCYrQf_AIPOH_DHnfjOMk0AVUJE&quot; alt=&quot;image&quot; width=&quot;816&quot; height=&quot;514.9416149068323&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380dba57af41173d03241&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/08965a69-9404-4f88-869a-f61cfc5c9baf/CleanShot_2025-05-09_at_14.46.06.png?table=block&amp;amp;id=1f6b8b2c-1c23-80db-a57a-f41173d03241&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=e3477HQnF-8jss89LJjLhtg_RQur8hKFQ4PsdV6GvZ8&quot; alt=&quot;image&quot; width=&quot;768&quot; height=&quot;504.87989886219975&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23808aa571e90739115c4f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/1bfd6d02-2a2b-466d-a9d1-b4b312fed0df/CleanShot_2025-05-09_at_14.46.21.png?table=block&amp;amp;id=1f6b8b2c-1c23-808a-a571-e90739115c4f&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=qStXR7Kbj3Fq6aETq7xS3u2CFJo7TyVXxbPFCa1dcj4&quot; alt=&quot;image&quot; width=&quot;768&quot; height=&quot;496.2015113350126&quot; /&gt;&lt;/div&gt;
&lt;a id=&quot;block-1f6b8b2c1c23805f9f96fa48aa7bc3c0&quot; class=&quot;notion-link notion-file&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; border-radius: 3px; color: inherit;&quot; href=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/7f8e93a8-c543-49f3-9f8b-0346cf80771d/a9p-WhatEnvoyHears.pdf?table=block&amp;amp;id=1f6b8b2c-1c23-805f-9f96-fa48aa7bc3c0&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=sNkEfG22AHCSPe14IU_0D0vMb4VsZYuVD1hNIRH4bWs&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
&lt;div style=&quot;box-sizing: border-box; display: flex; padding: 5px 0px; margin: 2px 0px; transition: background 120ms ease-in; border-radius: 3px;&quot;&gt;
&lt;div class=&quot;notion-file__icon&quot; style=&quot;box-sizing: border-box; margin-inline: 2px 4px; width: 1.5rem; text-align: center;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem;&quot; class=&quot;notion-file__title&quot;&gt;a9p-WhatEnvoyHears.pdf&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; margin-inline-start: 6px; color: #7d7c78; font-size: 0.75rem;&quot; class=&quot;notion-file__size&quot;&gt;3311.9KB&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/a&gt;
&lt;div id=&quot;block-1f6b8b2c1c238070a191f0254e8d37f6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380578681fd09ec2ddc04&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 이유로 istioctl은 출력을 작은 뭉치로 필터링하는 도구를 제공해 가독성을 높이고 이해를 돕는다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380bc8aa2f6aa21f9a6ce&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 관리 인터페이스 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/operations/admin&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.envoyproxy.io/docs/envoy/latest/operations/admin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23805dbde8ec3e2413740f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380ea9708ef43423c1443&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.3.2 istioctl 로 프록시 설정 쿼리하기&lt;/span&gt; Querying proxy configurations using istioctl&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380c7a68ceeea6c563a4b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;istioctl proxy-config&lt;/code&gt; 명령어를 사용하면 엔보이 xDS API를 기반으로 워크로드의 프록시 설정을 가져오고 필터링할 수 있다. 하위 명령어 참고.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801ebff2d8403df01435&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;cluster : 클러스터 설정을 가져온다&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b1af12f6744081d0db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;endpoint : 엔드포인트 설정을 가져온다&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380fb942bd37508df296d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;listener : 리스너 설정을 가져온다&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803c91a1c7d21072d7e4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;route : 루트 설정을 가져온다&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23807f954debd10701d40c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;secret : 시크릿 설정을 가져온다&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23800db381f7b3ff019042&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b4874fe924008dfa06&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;요청을 라우팅하기 위한 엔보이 API의 상호작용&lt;/u&gt;&lt;/span&gt; THE INTERACTION OF ENVOY APIS TO ROUTE A REQUEST&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23808c9844edd763950ae0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 10.8은 요청 라우팅을 설정하는 엔보이 API를 보여준다. Figure 10.8 shows the Envoy APIs that configure the routing of a request.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23808f9cebe47fe84677d1&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/bcff222c-0bda-4339-9969-b3e6cd528a81/CleanShot_2025-05-09_at_15.02.42.png?table=block&amp;amp;id=1f6b8b2c-1c23-808f-9ceb-e47fe84677d1&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=wK2WH30us9A-vpoDghYsgPIN8DauIptT2gSCsnNiB44&quot; alt=&quot;요청을 라우팅하기 위한 엔보이 API의 상호작용&quot; width=&quot;700&quot; height=&quot;321&quot; /&gt;요청을 라우팅하기 위한 엔보이 API의 상호작용&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d1b019ebce0b386afd&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b48767fc14ebbdf7cc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 API는 프록시에 다음과 같은 영향을 미친다.
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238063851ddb939bfa71aa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;일치하는 첫 번째 항목이 트래픽을 워크로드 클러스터로 라우팅하는 데 사용된다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d4be3ddc9b1ba6b7b7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;루트는 정적으로 설정할 수 도 있지만, 이스티오에서는 RDS를 사용해 동적으로 설정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e1b61ad5c459c3b390&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;부분집합&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Subsets&lt;/span&gt; 은 클러스터 내에서 워크로드를 더 분할하는 데 사용하며 덕분에 정밀한 트래픽 관리가 가능해진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23808383c3ff91d98da2f2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;리스너&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;listeners&lt;/span&gt; 는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네트워크 설정&lt;/span&gt;(다운스트림 트래픽을 프록시로 허용하는 IP 주소 및 포트 등)을 정의한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800a9c98c28842d67e35&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;허용된 커넥션에 HTTP &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;filter&lt;/span&gt; 체인이 만들어진다. 체인에서 가장 중요한 필터는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;라우터 필터&lt;/span&gt;로, 고급 라우팅 작업을 수행한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238050826be08e0d59e223&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;루트&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;routes&lt;/span&gt; 는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;가상 호스트를 클러스터에 일치시키는 규칙 집합&lt;/span&gt;이다. 루트는 순서대로 처리된다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380578dc5f7c4c9a01686&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;clusters&lt;/span&gt; 에서, 각 클러스터에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;유사한 워크로드에 대한 엔드포인트 그룹&lt;/span&gt;이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806ea7c1f5f971386f3f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔드포인트&lt;/span&gt;는 요청을 처리하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드의 IP 주소&lt;/span&gt;를 나타낸다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23805a879ad52e4506197d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380529112e268f0080ff1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 절에서는 인그레스 게이트웨이의 리스너, 루트, 클러스터, 엔드포인트 설정을 쿼리하고 수동으로 검증해본다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800487dae745a4ae1ac1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 통해 트래픽을 catalog 워크로드로 라우팅하도록 올바르게 설정했는지 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23809c9949e7f109073703&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380acb924d00889690499&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;엔보이 리스터 설정 쿼리하기&lt;/u&gt;&lt;/span&gt; QUERYING THE ENVOY LISTENER CONFIGURATION&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238081986edfaff2d22900&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;먼저 인그레스 게이트웨이 NodePort 30000 포트로 도착하는 트래픽이 클러스터로 허용되는지 부터 확인하자.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238037978af046e440fe42&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽을 허용하는 것은 엔보이 리스너의 역할로, 이스티오에서는 Gateway 리소스를 설정한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ffaa68cdebc4bec90c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;게이트웨이의 리스너 설정을 쿼리하고 80 포트에서 트래픽이 허용되는지 확인하자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238091a8cbc6d0ae7c009f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/istio-ingressgateway -n istio-system
ADDRESS PORT  MATCH DESTINATION
0.0.0.0 8080  ALL   Route: http.8080 # 8080 포트에 대한 요청은 루트 http.8080에 따라 라우팅하도록 설정된다
0.0.0.0 15021 ALL   Inline Route: /healthz/ready*
0.0.0.0 15090 ALL   Inline Route: /stats/prometheus*
## 리스터는 8080 포트에 설정돼 있다.
## 그 리스너에서 트래픽은 http.8080 이라는 루트에 따라 라우팅된다.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238086bcd0e5d7fc031123&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ab9987c77c256ca3e0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;루트 http.8080이 80 포트가 아니라 8080포트에서 리스닝하도록 설정됐다는 사실이 놀라울 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238075a809d02033a514cf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;포트 8080이 올라는 포트인지 확인하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23808cb8ecd82a3d7f542b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl get svc -n istio-system  istio-ingressgateway -o yaml | grep &quot;ports:&quot; -A10
  ports:
  - name: status-port
    nodePort: 30840
    port: 15021
    protocol: TCP
    targetPort: 15021
  - name: http2
    nodePort: 30000
    port: 80
    protocol: TCP
    targetPort: 8080&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809a897cd07598cbfe44&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽이 nodePort 30000 포트에 인입 시, istio-ingressgateway 서비스는 인그레스 게이트웨이(파드)에 tcp 8080 포트로 전달(도달)하게 됨.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238095b88fc0722c2436f4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;만약 k8s 클러스터 내부에서 clusterIP혹은 서비스명으로 tcp 80 요청 시 &amp;rarr; 인그레스 게이트웨이(파드)에 tcp 8080 포트로 전달(도달)하게 됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380279f4bef0996c0dbfb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그 트래픽을 인그레스 게이트웨이로 허용하는 리스너가 존재함을 확인했다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238063a7d3fdddf5a54b0b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 이 리스너의 라우팅은 루트 http.8080이 수행한다는 사실도 확인했다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e7b5b1e9ea90095053&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807bb006d2f3b4051171&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;엔보이 루트 설정 쿼리하기&lt;/u&gt;&lt;/span&gt; QUERYING THE ENVOY ROUTE CONFIGURATION&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a089fac7e2205fc559&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 루트 설정은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트래픽을 라우팅할 클러스터를 결정&lt;/span&gt;하는 규칙 집합을 정의한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The Envoy &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;route&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; configuration defines the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;set&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; of &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;rules&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; that determine the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;cluster&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; where traffic is &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;routed&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a08355cdd6057d2643&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 엔보이 루트를 VirtualService 리소스로 설정한다. 한편, 클러스터는 디스커비리로 자동 설정되거나 DestinationRule 리소스로 정의된다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380869359d8a6021f700d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;http.8080 루트의 트래픽을 어느 클러스터로 라우팅할지 알아내기 위해 설정을 쿼리해보자.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f296f0e849dcd667c0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 요약은 호스트 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;catalog.istioinaction.io&lt;/code&gt; 의 트래픽 중 URL이 경로 접두사 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/*&lt;/code&gt;과 일치하는 것이 istioinaction 네임스페이스의 catalog 서비스에 있는 catalog VirtualService 로 라우팅됨을 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238047ac16da7f740403da&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# http.8080 루트의 트래픽을 어느 클러스터로 라우팅할지 알아내기 위해 설정을 쿼리
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/istio-ingressgateway -n istio-system --name http.8080
NAME          DOMAINS                      MATCH     VIRTUAL SERVICE
http.8080     catalog.istioinaction.io     /*        catalog-v1-v2.istioinaction
## 호스트 catalog.istioinaction.io 의 트래픽 중 URL이 경로 접두사 /*과 일치하는 것이 istioinaction 네임스페이스의 catalog 서비스에 있는 catalog VirtualService 로 라우팅됨을 보여준다.

# 세부 정보 확인
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/istio-ingressgateway -n istio-system --name http.8080 -o json
...
                &quot;routes&quot;: [
                    {
                        &quot;match&quot;: {
                            &quot;prefix&quot;: &quot;/&quot; # 일치해야 하는 라우팅 규칙
                        },
                        &quot;route&quot;: {
                            &quot;weightedClusters&quot;: {
                                 # vs에서 설정된것처럼 v1에 20, v2에 80의 비율로 route 됨.
                                &quot;clusters&quot;: [ # 규칙이 일치할 때 트래픽을 라우팅하는 클러스터
                                    {
                                        &quot;name&quot;: &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;,
                                        &quot;weight&quot;: 20
                                    },
                                    {
                                        &quot;name&quot;: &quot;outbound|80|version-v2|catalog.istioinaction.svc.cluster.local&quot;,
                                        &quot;weight&quot;: 80
                                    }
                                ],
                                &quot;totalWeight&quot;: 100
                            },
...


kubectl get vs -n istioinaction -o yaml
apiVersion: v1
items:
- apiVersion: networking.istio.io/v1beta1
  kind: VirtualService
  metadata:
    generation: 1
    name: catalog-v1-v2
    namespace: istioinaction
    resourceVersion: &quot;4672&quot;
    uid: 29f85d90-8f16-4346-a4dd-215a9b91198c
  spec:
    gateways:
    - catalog-gateway
    hosts:
    - catalog.istioinaction.io
    http:
    - route:
      - destination:
          host: catalog.istioinaction.svc.cluster.local
          port:
            number: 80
          subset: version-v1
        weight: 20
      - destination:
          host: catalog.istioinaction.svc.cluster.local
          port:
            number: 80
          subset: version-v2
        weight: 80
kind: List
metadata:
  resourceVersion: &quot;&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23804da540d2cbd0658692&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e182a6ff9609d711a7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 출력 : &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;{DIRECTION} | {PORT} | {SUBSET} | {FQDN}&lt;/code&gt; &amp;rArr; 루트가 일치할 때 트래픽을 수신하는 클러스터가 둘임을 보여줌.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806bbc42da8316d88bfc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380cfb40ec2b9b09ae016&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;outbound|80|version-v2|catalog.istioinaction.svc.cluster.local&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23806ab483ee51f5242112&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a59e34ce9aa980752e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;엔보이 클러스터 설정 쿼리하기&lt;/u&gt;&lt;/span&gt; QUERYING THE ENVOY CLUSTER CONFIGURATION&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238013a611ce5221118982&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터&lt;/span&gt; 설정은&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 요청을 라우팅&lt;/span&gt;할 수 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;백엔드 서비스&lt;/span&gt;를 정의한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The Envoy &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;cluster&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; configuration defines the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;backend&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; services to which &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;requests&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; can be &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;routed&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802a8205f3d8babb3b26&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터는 부하를 여러 인스턴스나 엔드포인트에 분산한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f7ab07fdad40750fba&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 엔드포인트(보통 IP 주소)는 최종 사용자 트래픽을 처리하는 개별 워크로드 인스턴스를 나타낸다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d19fd3d019fa674800&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b09736d555f5aa0ff0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istioctl을 사용하면 인그레스 게이트웨이가 알고 있는 클러스터를 쿼리할 수 있지만, 클러스터가 많다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238039b035dea795c4d343&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;라우팅할 수 있는 모든 백엔드 서비스마다 하나씩 설정되기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238075ba1af9559ca78264&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;istioctl proxy-config clusters&lt;/code&gt; 의 플래그 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;direction, fqdn, port, suben&lt;/span&gt;t 을 사용하면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;특정 클러스터만 출력할&lt;/span&gt; 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b296a5ea4c104d7ed5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;플래그에서 사용할 정보는 그림 10.9와 같이 앞서 가져온 클러스터 이름에 포함돼 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23801e834fdcf43a896cce&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/785c2cfa-a56b-4218-80c5-30c60105f520/CleanShot_2025-05-09_at_16.31.26.png?table=block&amp;amp;id=1f6b8b2c-1c23-801e-834f-dcf43a896cce&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=-Er6YRSqDmQLpGuBLjrETi81Diba3HR1w4f50RXjP_A&quot; alt=&quot;클러스터 이름을 구성하는 구성 요소&quot; width=&quot;660&quot; height=&quot;150&quot; /&gt;클러스터 이름을 구성하는 구성 요소&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803b9279d3f66826df33&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238026b204fef8b2576c3f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 중 하나를 쿼리해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b58e13c662a01c06eb&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
docker exec -it myk8s-control-plane istioctl proxy-config clusters deploy/istio-ingressgateway -n istio-system \
--fqdn catalog.istioinaction.svc.cluster.local --port 80
SERVICE FQDN                                PORT     SUBSET     DIRECTION     TYPE     DESTINATION RULE
catalog.istioinaction.svc.cluster.local     80       -          outbound      EDS  

#
docker exec -it myk8s-control-plane istioctl proxy-config clusters deploy/istio-ingressgateway -n istio-system \
--fqdn catalog.istioinaction.svc.cluster.local --port 80 --subset version-v1

# 현재 DR을 통한 subset이 설정되지 않아서 subset의 정보는 나오지 않는다.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380118a0ffb99efb5c181&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;부분 집합&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;subset&lt;/span&gt; version-v1 이나 version-v2 용 클러스터는 없었다! &amp;rArr; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;이 부분 집합에 대한 클러스터가 없으면 요청은 실패한다.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380919a96dd2f214b2d22&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238069b427f78b6561363a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;정상 설정 전에 istioctl analyze 명령어를 사용해서, 설정할 yaml 파일이 식별한 서비스 메시 오류를 고칠 수 있는지 확인해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23801ab3c6c2ce122178f8&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 해당 파일이 없을 경우 'copy &amp;amp; paste'로 작성 후 진행 하자
docker exec -it myk8s-control-plane cat /istiobook/ch10/catalog-destinationrule-v1-v2.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: catalog
  namespace: istioinaction
spec:
  host: catalog.istioinaction.svc.cluster.local
  subsets:
  - name: version-v1
	  # dr을 통해 설정한 destinsation workload service의 label을 설정
    labels:
      version: v1
  - name: version-v2
    labels:
      version: v2

# istioctl analyze 명령어를 사용해서, 설정할 yaml 파일이 식별한 서비스 메시 오류를 고칠 수 있는지 확인
docker exec -it myk8s-control-plane istioctl analyze /istiobook/ch10/catalog-destinationrule-v1-v2.yaml -n istioinaction
✔ No validation issues found when analyzing /istiobook/ch10/catalog-destinationrule-v1-v2.yaml.
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238049935bfbd9b37a3d9e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;리소스 적용의 영향을 시뮬레이션해보니 클러스터에 검증 오류가 없어진다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238074b4f9f5f07d002cbb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉, 이 DestinationRule을 적용하면 클러스터 설정의 문제가 고쳐진다는 것이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c5ba4ef6594fe65d31&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d4b100cc9cac12abc3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 문제를 해결해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23800a8203e7d0bf6afe92&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;armasm&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 문제 해결
cat ch10/catalog-destinationrule-v1-v2.yaml
kubectl apply -f ch10/catalog-destinationrule-v1-v2.yaml

# 확인
# DR을 통해서 subset이 등록되어 두개의 subset이 추가로 확인되거, DESTINATION RULE도 정상 등록 되어 정보가 보인다.
docker exec -it myk8s-control-plane istioctl proxy-config clusters deploy/istio-ingressgateway -n istio-system \
--fqdn catalog.istioinaction.svc.cluster.local --port 80
SERVICE FQDN                                PORT     SUBSET         DIRECTION     TYPE     DESTINATION RULE
catalog.istioinaction.svc.cluster.local     80       -              outbound      EDS      catalog.istioinaction
catalog.istioinaction.svc.cluster.local     80       version-v1     outbound      EDS      catalog.istioinaction
catalog.istioinaction.svc.cluster.local     80       version-v2     outbound      EDS      catalog.istioinaction

CATALOG_POD1=$(kubectl get pod -n istioinaction -l app=catalog -o jsonpath='{.items[0].metadata.name}')
docker exec -it myk8s-control-plane istioctl x des pod -n istioinaction $CATALOG_POD1
Pod: catalog-6cf4b97d-qjpbc
   Pod Revision: default
   Pod Ports: 3000 (catalog), 15090 (istio-proxy)
--------------------
Service: catalog
   Port: http 80/HTTP targets pod port 3000
DestinationRule: catalog for &quot;catalog.istioinaction.svc.cluster.local&quot;
   Matching subsets: version-v1
      (Non-matching subsets version-v2)
   No Traffic Policy
--------------------
Effective PeerAuthentication:
   Workload mTLS mode: PERMISSIVE


Exposed on Ingress Gateway http://172.19.0.2
VirtualService: catalog-v1-v2
   Weight 20%
   
docker exec -it myk8s-control-plane istioctl analyze -n istioinaction

# 호출 확인
curl http://catalog.istioinaction.io:30000/items
curl http://catalog.istioinaction.io:30000/items
[
  {
    &quot;id&quot;: 1,
    &quot;color&quot;: &quot;amber&quot;,
    &quot;department&quot;: &quot;Eyewear&quot;,
    &quot;name&quot;: &quot;Elinor Glasses&quot;,
    &quot;price&quot;: &quot;282.00&quot;
  },
  {
    &quot;id&quot;: 2,
    &quot;color&quot;: &quot;cyan&quot;,
    &quot;department&quot;: &quot;Clothing&quot;,
    &quot;name&quot;: &quot;Atlas Shirt&quot;,
    &quot;price&quot;: &quot;127.00&quot;
  },
  {
    &quot;id&quot;: 3,
    &quot;color&quot;: &quot;teal&quot;,
    &quot;department&quot;: &quot;Clothing&quot;,
    &quot;name&quot;: &quot;Small Metal Shoes&quot;,
    &quot;price&quot;: &quot;232.00&quot;
  },
  {
    &quot;id&quot;: 4,
    &quot;color&quot;: &quot;red&quot;,
    &quot;department&quot;: &quot;Watches&quot;,
    &quot;name&quot;: &quot;Red Dragon Watch&quot;,
    &quot;price&quot;: &quot;232.00&quot;
  }
]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d089d1dac9b00c1765&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380ec9c58eba8a351c3f6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;클러스터는 어떻게 설정되는가?&lt;/u&gt;&lt;/span&gt; HOW CLUSTERS ARE CONFIGURED&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806fa16ec7d9dbc2cdbf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 프록시에는 클러스터 엔드포인트를 발견하기 위한 여러 가지 방법이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ca874ce86a15f16925&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사용 중인 방법은 istioctl에서 version-v1 클러스터를 JSON 형식으로 출력해보면 알 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23805c863de40094bc7161&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
docker exec -it myk8s-control-plane istioctl proxy-config clusters deploy/istio-ingressgateway -n istio-system \
--fqdn catalog.istioinaction.svc.cluster.local --port 80 --subset version-v1 -o json
...
        &quot;name&quot;: &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;,
        &quot;type&quot;: &quot;EDS&quot;,
        &quot;edsClusterConfig&quot;: {
            &quot;edsConfig&quot;: {
                &quot;ads&quot;: {},
                &quot;initialFetchTimeout&quot;: &quot;0s&quot;,
                &quot;resourceApiVersion&quot;: &quot;V3&quot;
            },
            &quot;serviceName&quot;: &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;
        },
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d3a03bca664dc358b9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 출력 내용은 edsClusterConfig 가 엔드포인트를 쿼리하는 데 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ADS&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Aggregated Discovery Service&lt;/span&gt; 를 사용하도록 설정됐음을 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806eab07c020c4474751&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 이름 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&lt;/code&gt; 은 ADS를 쿼리할 때 엔드포인트용 필터로 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238069a6b5f3c7dc9f00d2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c2b790dd8c81ef3fa0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;엔보이 클러스터 엔드포인트 쿼리하기&lt;/u&gt;&lt;/span&gt; QUERYING ENVOY CLUSTER ENDPOINTS&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804ba485ee7d6b7269b2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 엔보이 프록시가 서비스 이름으로 ADS를 쿼리하도록 설정된 것을 알았으니, 인그레스 게이트웨이에서 클러스터의 엔드포인트를 istioctl proxy-config endpoints 명령어로 수동으로 쿼리하는데 이 정보를 사용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a090bed7f3bfc9ccd9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 엔드포인트 정보 확인 : IP 정보
docker exec -it myk8s-control-plane istioctl proxy-config endpoints deploy/istio-ingressgateway -n istio-system \
--cluster &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;
ENDPOINT            STATUS      OUTLIER CHECK     CLUSTER
10.10.0.14:3000     HEALTHY     OK                outbound|80|version-v1|catalog.istioinaction.svc.cluster.local

# 해당 IP 쿼리로 실제 워크로드가 있는지 확인
kubectl get pod -n istioinaction --field-selector status.podIP=10.10.0.12 -owide --show-labels
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE                  NOMINATED NODE   READINESS GATES   LABELS
catalog-6cf4b97d-qjpbc   2/2     Running   0          68m   10.10.0.14   myk8s-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;            app=catalog, ..., version=v1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380eea943fb4de219e993&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실제로 있다! 트래픽을 워크로드로 라우팅하도록 서비스 프록시를 설정하는 엔보이 API 리소스 체인 전체를 완성했다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238092a9b1d3728fd443f7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d89509fa7cd1cd6793&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지금까지 잘못 설정한 워크로드를 발견하는 것에 대해 이야기했다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380fc8379e6588e793c78&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 절에서는 애플리케이션 문제를 디버깅하는 데 서비스 프록시가 어떻게 도움이 되는지 알아본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803b93c1f2f88289ee80&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380de877ed048ee7d99e1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.3.3 애플리케이션 문제 트러블슈팅하기&lt;/span&gt; Troubleshooting application issues&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238011a6ccf02d623978a4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마이크로서비스 기반 애플리케이션에서 서비스 프록시가 생성하는 로그와 메트릭은 성능 병목을 일으키는 서비스 디스커버리, 빈번하게 실패하는 엔드포인트 식별, 성능 저하 감지 등과 같은 많은 문제를 트러블슈팅하는 데 도움이 된다. 6장에서는 이런 애플리케이션 복원력 문제를 해결하는 방법을 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801ab9bbf728566735bd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 절에서는 엔보이 액세스 로그와 메트릭을 사용해 이 문제들 중 일부를 트러블슈팅해본다. 그러나 먼저, 트러블슈팅할 문제가 생기도록 서비스를 업데이트하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380df9842d59248076c9e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380eea59fdc8cccd4be1f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;간헐적으로 제한 시간을 초과하는 느린 워크로드 준비하기*&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; SETTING UP AN INTERMITTENTLY SLOW WORKLOAD THAT TIMES OUT&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380fe8a9bf9e809f7a7f4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;설정 전 정상 통신 환경 상태 확인&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380f1be2efd645d41d3c2&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 신규 터미널
for in in {1..9999}; do curl http://catalog.istioinaction.io:30000/items -w &quot;\nStatus Code %{http_code}\n&quot;; sleep 1; done&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809596cbf72075860389&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kiali : catalog - 100% 성공&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380ea9691c442ea39ee29&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/20ac19fc-fa18-4c64-ab99-8099e5492307/CleanShot_2025-05-09_at_16.59.26.png?table=block&amp;amp;id=1f6b8b2c-1c23-80ea-9691-c442ea39ee29&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=hCExUDqIg-7A9nkbVr_W5D3Qox5wctZWvuL3leIh4Mc&quot; alt=&quot;image&quot; width=&quot;768&quot; height=&quot;356.0816326530612&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800ba5dec7e84a63199f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kiali : catalog 에 v1 링크 클릭 후 오른쪽 탭 메뉴 하단에 HTTP Request Response Time(ms)에 p99 확인 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&amp;rarr; 4.96ms&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803689bcd46537fb8c32&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/7b9633f6-45ab-4703-be55-9388d2103c21/CleanShot_2025-05-09_at_17.01.31.png?table=block&amp;amp;id=1f6b8b2c-1c23-8036-89bc-d46537fb8c32&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=yT1-uuuiA1ym9k5JVIY6PF72x8kiGTgvE-rzSkw3fbs&quot; alt=&quot;image&quot; width=&quot;528&quot; height=&quot;387.60693641618496&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23808f9c15d5fd7aeadd5e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kiali : catalog 에 v2 링크 클릭 후 오른쪽 탭 메뉴 하단에 HTTP Request Response Time(ms)에 p99 확인 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&amp;rarr; 4.8ms&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380eebd8dc041266f2fb0&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/e53aa84f-77b5-4fe8-8cbf-0b2b61ae4e06/CleanShot_2025-05-09_at_17.03.38.png?table=block&amp;amp;id=1f6b8b2c-1c23-80ee-bd8d-c041266f2fb0&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=y646vGKh-maCQfeWuiqCKiIGElfFxLF_C0B2IgKS-As&quot; alt=&quot;image&quot; width=&quot;528&quot; height=&quot;384&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238097988ad29480eb0769&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Grafana - Istio Mesh 대시보드&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238062bf88c6f4347ecd20&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/6585cd7a-4a81-44e8-acee-3bd3549a69c1/CleanShot_2025-05-09_at_17.05.27.png?table=block&amp;amp;id=1f6b8b2c-1c23-8062-bf88-c6f4347ecd20&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=Q8qDB_KkibQayF3gzzDLsrWjy9s_nnvS6kqATR30n0w&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;272.1412024269167&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380259348d8e9a2cbc2b7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803db89ff350299a999f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;catalog 워크로드가 간헐적으로 응답을 느리게 반환하도록 설정&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a19a11dd05ed59879d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# catalog v2 파드 중 첫 번째 파드 이름 변수 지정
CATALOG_POD=$(kubectl get pods -l version=v2 -n istioinaction -o jsonpath={.items..metadata.name} | cut -d ' ' -f1)
echo $CATALOG_POD
catalog-v2-56c97f6db-868wt

# 해당 파드에 latency (지연) 발생하도록 설정
kubectl -n istioinaction exec -c catalog $CATALOG_POD \
-- curl -s -X POST -H &quot;Content-Type: application/json&quot; \
-d '{&quot;active&quot;: true, &quot;type&quot;: &quot;latency&quot;, &quot;volatile&quot;: true}' \
localhost:3000/blowup ;
blowups=[object Object]


# 신규 터미널
for in in {1..9999}; do curl http://catalog.istioinaction.io:30000/items -w &quot;\nStatus Code %{http_code}\n&quot;; sleep 1; done
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380589fa7d2d0c6e64558&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Grafana - Istio Mesh 대시보드 : v2 에 P90, P99 레이턴스 확인 , v1 과 비교해보자.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380ac90dbf73431ef51e0&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 996px; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; width: 996px; object-fit: contain; border-radius: 0px; object-position: center center;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/78da9075-35b2-4546-90c5-b9ad209badef/CleanShot_2025-05-09_at_17.29.57.png?table=block&amp;amp;id=1f6b8b2c-1c23-80ac-90db-f73431ef51e0&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=Tvwx8wX9hAGx2IRpK2whzegz41DmpWsqiRRSUMW57s0&quot; alt=&quot;image&quot; width=&quot;952.953125&quot; height=&quot;79.28062603993344&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380abae50c5febfbf0524&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kiali : catalog v2&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23801b8126c2d5178c5d69&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/ea40c13b-f4dd-4731-a74e-fe150a6c982a/CleanShot_2025-05-09_at_17.30.46.png?table=block&amp;amp;id=1f6b8b2c-1c23-801b-8126-c2d5178c5d69&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=yMES0JK1D3SXiDjEroZICdT_aZ_iFGdYRl2Ue1Lv53Y&quot; alt=&quot;image&quot; width=&quot;528&quot; height=&quot;382.001982160555&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c2b34af98bb1724d5e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380fda70aee4ad52739a8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Istio 에 요청 처리 제한 시간 0.5초가 되도록 VirtualService 설정&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380fc9999ca878ba83812&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/843a2d63-3bef-4297-b029-9498f9c3c885/CleanShot_2025-05-09_at_17.40.25.png?table=block&amp;amp;id=1f6b8b2c-1c23-80fc-9999-ca878ba83812&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=bs9DPlqPaO5aP5283clFsacQGBreJ3nyi9BO4RmO2vE&quot; alt=&quot;2가지 변경 사항 : catalog v2 중 파드 1대는 간헐적으로 느린 응답을 하고, istio-proxy 가 요청 0.5초 이상 시 시간 초과(timeout) 발생&quot; width=&quot;912&quot; height=&quot;416.08488063660474&quot; /&gt;2가지 변경 사항 : catalog v2 중 파드 1대는 간헐적으로 느린 응답을 하고, istio-proxy 가 요청 0.5초 이상 시 시간 초과(timeout) 발생&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a5b81df8aac7487b3e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
kubectl get vs -n istioinaction
NAME            GATEWAYS              HOSTS                          AGE
catalog-v1-v2   [&quot;catalog-gateway&quot;]   [&quot;catalog.istioinaction.io&quot;]   6h44m

# 타임아웃(0.5s) 적용
kubectl patch vs catalog-v1-v2 -n istioinaction --type json \
-p '[{&quot;op&quot;: &quot;add&quot;, &quot;path&quot;: &quot;/spec/http/0/timeout&quot;, &quot;value&quot;: &quot;0.5s&quot;}]'

# 적용확인 
kubectl get vs catalog-v1-v2 -n istioinaction -o jsonpath='{.spec.http[?(@.timeout==&quot;0.5s&quot;)]}' | jq
...
  &quot;timeout&quot;: &quot;0.5s&quot;
}

# 신규 터미널
for in in {1..9999}; do curl http://catalog.istioinaction.io:30000/items -w &quot;\nStatus Code %{http_code}\n&quot;; sleep 1; done
upstream request timeout
Status Code 504
upstream request timeout
Status Code 504
..

#
kubectl logs -n istio-system -l app=istio-ingressgateway -f
[2025-05-17T07:21:00.997Z] &quot;GET /items HTTP/1.1&quot; 504 UT response_timeout - &quot;-&quot; 0 24 501 - &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;9028ec4f-3aa6-9be3-aa9b-abb1fd37ac8d&quot; &quot;catalog.istioinaction.io:30000&quot; &quot;10.10.0.16:3000&quot; outbound|80|version-v2|catalog.istioinaction.svc.cluster.local 10.10.0.9:34126 10.10.0.9:8080 192.168.65.1:44671 - -
[2025-05-17T07:21:02.544Z] &quot;GET /items HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 502 5 5 &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;4b7c7857-a719-9c4a-b55b-b094ac3078fb&quot; &quot;catalog.istioinaction.io:30000&quot; &quot;10.10.0.15:3000&quot; outbound|80|version-v2|catalog.istioinaction.svc.cluster.local 10.10.0.9:40948 10.10.0.9:8080 192.168.65.1:38238 - -
...

kubectl logs -n istio-system -l app=istio-ingressgateway -f | grep 504
[2025-05-17T07:21:09.730Z] &quot;GET /items HTTP/1.1&quot; 504 UT response_timeout - &quot;-&quot; 0 24 501 - &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;29e1175b-2bd0-9c7a-9ac9-6f6e6bf586d3&quot; &quot;catalog.istioinaction.io:30000&quot; &quot;10.10.0.16:3000&quot; outbound|80|version-v2|catalog.istioinaction.svc.cluster.local 10.10.0.9:35724 10.10.0.9:8080 192.168.65.1:17773 - -
[2025-05-17T07:21:11.259Z] &quot;GET /items HTTP/1.1&quot; 504 UT response_timeout - &quot;-&quot; 0 24 501 - &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;9a8c772b-7d1a-9d4c-ab33-a7b773b9a69e&quot; &quot;catalog.istioinaction.io:30000&quot; &quot;10.10.0.16:3000&quot; outbound|80|version-v2|catalog.istioinaction.svc.cluster.local 10.10.0.9:56206 10.10.0.9:8080 192.168.65.1:34982 - -
...

# 여기서 중요한건 downstream에서 remote disconnect가 일어났다는것인다.
# 즉, istio-ingressgateway의 istio-proxy측에서 connection을 종료했다는것이다.
kubectl logs -n istioinaction -l version=v2 -c istio-proxy -f
[2025-05-17T07:21:48.477Z] &quot;GET /items HTTP/1.1&quot; 0 DC downstream_remote_disconnect - &quot;-&quot; 0 0 501 - &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;2a0e2fb6-caa0-9cf6-9de3-4ebc96f6205c&quot; &quot;catalog.istioinaction.io:30000&quot; &quot;10.10.0.16:3000&quot; inbound|3000|| 127.0.0.6:59985 10.10.0.16:3000 192.168.65.1:0 outbound_.80_.version-v2_.catalog.istioinaction.svc.cluster.local default
[2025-05-17T07:21:50.024Z] &quot;GET /items HTTP/1.1&quot; 0 DC downstream_remote_disconnect - &quot;-&quot; 0 0 503 - &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;b122244d-8b9f-9e80-9785-47f3c0c83182&quot; &quot;catalog.istioinaction.io:30000&quot; &quot;10.10.0.16:3000&quot; inbound|3000|| 127.0.0.6:36075 10.10.0.16:3000 192.168.65.1:0 outbound_.80_.version-v2_.catalog.istioinaction.svc.cluster.local default
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380409a96e81a28c00f70&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kiali : catalog v2&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238082aaa6d5d26c69666a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/30b6417f-3925-4fa6-8f39-d07f4e2777a3/CleanShot_2025-05-09_at_17.39.10.png?table=block&amp;amp;id=1f6b8b2c-1c23-8082-aaa6-d5d26c69666a&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=uIFef4OuUCw_kU6Kh9-UmpuJZWHOeb24UEOUlXONF4I&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;380.8854961832061&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238027bd2de8e9413f02dd&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/87391460-0b4b-40d4-8921-d4b4acdd991a/CleanShot_2025-05-09_at_17.35.20.png?table=block&amp;amp;id=1f6b8b2c-1c23-8027-bd2d-e8e9413f02dd&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=8CVpDJyZl6WkvHHvBDwiGzgsMjLyFgWvfns9iQtlJ0s&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;487.7315436241611&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380eda4cfc98820cee688&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Grafana - Istio Mesh 대시보드 : 500 응답 증가, v2 에 Success Rate % 확인&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238082b1f7ccfa7d07846a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/c38a695b-0e81-4d08-b5d2-fa8ad9e9eaa0/CleanShot_2025-05-09_at_17.35.48.png?table=block&amp;amp;id=1f6b8b2c-1c23-8082-b1f7-ccfa7d07846a&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=fKXtxnTqNb7RtTgBfgWl7GIKdGTr_q1R_RKWciXUMDs&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;270.57679558011046&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23802f8414c45eacf0618d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23801d972ff11ca4b66dc8&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;엔보이 액세스 로그 이해하기&lt;/u&gt;&lt;/span&gt; + &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;엔보이 액세스 로그 형식 바꾸기&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380be8699dd38d2ef5f7e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본적으로 이스티오는 프록시가 로그를 TEXT 형식으로 기록하도록 설정하는데, 간결하지만 읽기는 어렵다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d6bb6fcc5c8951ef20&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;JSON 형식을 사용하게 설정 : 이 형식의 이점은 값이 키와 연결돼 의미를 알 수 있다.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e7af15c0b3a1694a34&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 형식 설정 전 로그 확인
kubectl logs -n istio-system -l app=istio-ingressgateway -f | grep 504
...

# MeshConfig 설정 수정
KUBE_EDITOR=&quot;nano&quot; kubectl edit -n istio-system cm istio
...
  mesh: |-
    accessLogFile: /dev/stdout # 기존 설정되어 있음
    accessLogEncoding: JSON # 추가
...

# 형식 설정 후 로그 확인
kubectl logs -n istio-system -l app=istio-ingressgateway -f | jq
...
{
  &quot;upstream_host&quot;: &quot;10.10.0.16:3000&quot;, # 요청을 받는 업스트림 호스트
  &quot;bytes_received&quot;: 0,
  &quot;upstream_service_time&quot;: null,
  &quot;response_code_details&quot;: &quot;response_timeout&quot;,
  &quot;upstream_cluster&quot;: &quot;outbound|80|version-v2|catalog.istioinaction.svc.cluster.local&quot;,
  &quot;duration&quot;: 501, # 500ms 인 제한 시간 초과
  &quot;response_code&quot;: 504,
  &quot;path&quot;: &quot;/items&quot;,
  &quot;protocol&quot;: &quot;HTTP/1.1&quot;,
  &quot;upstream_transport_failure_reason&quot;: null,
  &quot;connection_termination_details&quot;: null,
  &quot;method&quot;: &quot;GET&quot;,
  &quot;requested_server_name&quot;: null,
  &quot;start_time&quot;: &quot;2025-05-17T07:25:37.244Z&quot;,
  &quot;downstream_remote_address&quot;: &quot;192.168.65.1:52667&quot;,
  &quot;upstream_local_address&quot;: &quot;10.10.0.9:50830&quot;,
  &quot;downstream_local_address&quot;: &quot;10.10.0.9:8080&quot;,
  &quot;bytes_sent&quot;: 24,
  &quot;authority&quot;: &quot;catalog.istioinaction.io:30000&quot;,
  &quot;x_forwarded_for&quot;: &quot;192.168.65.1&quot;,
  &quot;request_id&quot;: &quot;6abf75de-4af2-918e-abea-f06b21950b41&quot;,
  &quot;route_name&quot;: null,
  &quot;response_flags&quot;: &quot;UT&quot;, # 엔보이 응답 플래그, UT(Upstream request Timeout)로 중단됨, '업스트림 요청 제한 시간 초과'
  &quot;user_agent&quot;: &quot;curl/8.7.1&quot;
}
...

# slow 동작되는 파드 IP로 느린 동작 파드 확인!
CATALOG_POD=$(kubectl get pods -l version=v2 -n istioinaction -o jsonpath={.items..metadata.name} | cut -d ' ' -f1)
kubectl get pod -n istioinaction $CATALOG_POD -owide
NAME                         READY   STATUS    RESTARTS   AGE   IP           NODE                  NOMINATED NODE   READINESS GATES
catalog-v2-56c97f6db-868wt   2/2     Running   0          84m   10.10.0.16   myk8s-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806fa08ad8580b0d3158&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;필요 시 엔보이 프록시의 로깅 수준을 높여 더 자세한 로그를 얻을 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238099b699d81c7e37283f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380f2b814eff8d96b3792&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;엔보이 게이트웨이의 로깅 수준 높이기&lt;/u&gt;&lt;/span&gt; INCREASING THE LOGGING LEVEL FOR THE INGRESS GATEWAY&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b2b98cf0a9ec97ce22&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;현재 로깅 수준 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d6a5ccfaf75d5a4840&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
docker exec -it myk8s-control-plane istioctl proxy-config log deploy/istio-ingressgateway -n istio-system
istio-ingressgateway-6bb8fb6549-hcdnc.istio-system:
active loggers:
  admin: warning
  alternate_protocols_cache: warning
  aws: warning
  assert: warning
  backtrace: warning
  cache_filter: warning
  client: warning
  config: warning
  connection: warning # 커넥션 범위에서는 네트워크 계층과 관련된 정보를 기록.
  ...
  http: warning # HTTP 범위에서는 HTTP 헤더, 경로 등 애플리케이션과 관련된 졍보를 기록.
  ...
  router: warning # 라우팅 범위에서는 요청이 어느 클러스터로 라우팅되는지 같은 세부 사항을 기록.
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d19d3adfcaf11d519c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380109744dae49a8ea7e1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사용할 수 있는 로깅 수준에는 none, error, warning, info, debug 가 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803b957efc26efc8e7cb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;각 범위에 로깅 수준을 서로 다르게 지정할 수 있는 덕분에 엔보이가 만들어내는 로그에 질식하지 않고 관심 영역의 로깅 수준만 정확하게 높일 수 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238017aab0d3f6996e7a18&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;connection&lt;/span&gt; : Logs related to layer 4 (transport); TCP connection details&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238003ac9edd3a592e722f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;http&lt;/span&gt; : Logs related to layer 7 (application); HTTP details&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238016bf85fcacb2432816&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;router&lt;/span&gt;: Logs related to the routing of HTTP requests&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801092d4d9762eb2b480&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;pool&lt;/span&gt; : Logs related to how a connection pool acquires or drops a connection&amp;rsquo;s upstream host&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238099b7f5daf6dc91c710&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f59aa8f6bf8de8bb7b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;connection , http , router , pool 로거의 수준을 debug 로 높여보자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23806b87c5e766dce9deea&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
docker exec -it myk8s-control-plane istioctl proxy-config log deploy/istio-ingressgateway -n istio-system \
--level http:debug,router:debug,connection:debug,pool:debug

# 로그 확인
kubectl logs -n istio-system -l app=istio-ingressgateway -f
k logs -n istio-system -l app=istio-ingressgateway -f &amp;gt; istio-igw-log.txt # 편집기로 열어서 보기
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23808288cdc5fbe208f534&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380969662def2573113c3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;편집기로 열어서 보기&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238045a496ed7d571a2c2b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 504 검색
2025-05-09T09:17:17.762027Z	debug	envoy http external/envoy/source/common/http/filter_manager.cc:967	[C18119][S12425904214070917868] Sending local reply with details response_timeout	thread=38
2025-05-09T09:17:17.762072Z	debug	envoy http external/envoy/source/common/http/conn_manager_impl.cc:1687	[C18119][S12425904214070917868] encoding headers via codec (end_stream=false):
':status', '504'
'content-length', '24'
'content-type', 'text/plain'
'date', 'Fri, 09 May 2025 09:17:17 GMT'
'server', 'istio-envoy'
	thread=38

# 커넥션 ID(C18119)로 다시 검색

## [C18119] new stream  # 시작
2025-05-09T09:17:17.262341Z	debug	envoy http external/envoy/source/common/http/conn_manager_impl.cc:329	[C18119] new stream	thread=38
2025-05-09T09:17:17.262425Z	debug	envoy http external/envoy/source/common/http/conn_manager_impl.cc:1049	[C18119][S12425904214070917868] request headers complete (end_stream=true):
':authority', 'catalog.istioinaction.io:30000'
':path', '/items'
':method', 'GET'
'user-agent', 'curl/8.7.1'
'accept', '*/*'
	thread=38

## /items 요청이 cluster로 매칭됨
2025-05-09T09:17:17.262445Z	debug	envoy http external/envoy/source/common/http/conn_manager_impl.cc:1032	[C18119][S12425904214070917868] request end stream	thread=38
2025-05-09T09:17:17.262468Z	debug	envoy connection external/envoy/source/common/network/connection_impl.h:92	[C18119] current connecting state: false	thread=38
025-05-09T09:17:17.262603Z	debug	envoy router external/envoy/source/common/router/router.cc:470	[C18119][S12425904214070917868] cluster 'outbound|80|version-v2|catalog.istioinaction.svc.cluster.local' match for URL '/items'	thread=38
2025-05-09T09:17:17.262683Z	debug	envoy router external/envoy/source/common/router/router.cc:678	[C18119][S12425904214070917868] router decoding headers:
':authority', 'catalog.istioinaction.io:30000'
':path', '/items'
':method', 'GET'
':scheme', 'http'
'user-agent', 'curl/8.7.1'
'accept', '*/*'
'x-forwarded-for', '172.18.0.1'
'x-forwarded-proto', 'http'
'x-envoy-internal', 'true'
'x-request-id', 'a6bc39e7-9215-950f-96ea-4cb5f6b12deb'
'x-envoy-decorator-operation', 'catalog-v1-v2:80/*'
'x-envoy-peer-metadata', 'ChQKDkFQUF9DT05UQUlORVJTEgIaAAoaCgpDTFVTVEVSX0lEEgwaCkt1YmVybmV0ZXMKGwoMSU5TVEFOQ0VfSVBTEgsaCTEwLjEwLjAuNwoZCg1JU1RJT19WRVJTSU9OEggaBjEuMTcuOAqcAwoGTEFCRUxTEpEDKo4DCh0KA2FwcBIWGhRpc3Rpby1pbmdyZXNzZ2F0ZXdheQoTCgVjaGFydBIKGghnYXRld2F5cwoUCghoZXJpdGFnZRIIGgZUaWxsZXIKNgopaW5zdGFsbC5vcGVyYXRvci5pc3Rpby5pby9vd25pbmctcmVzb3VyY2USCRoHdW5rbm93bgoZCgVpc3RpbxIQGg5pbmdyZXNzZ2F0ZXdheQoZCgxpc3Rpby5pby9yZXYSCRoHZGVmYXVsdAowChtvcGVyYXRvci5pc3Rpby5pby9jb21wb25lbnQSERoPSW5ncmVzc0dhdGV3YXlzChIKB3JlbGVhc2USBxoFaXN0aW8KOQofc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtbmFtZRIWGhRpc3Rpby1pbmdyZXNzZ2F0ZXdheQovCiNzZXJ2aWNlLmlzdGlvLmlvL2Nhbm9uaWNhbC1yZXZpc2lvbhIIGgZsYXRlc3QKIgoXc2lkZWNhci5pc3Rpby5pby9pbmplY3QSBxoFZmFsc2UKGgoHTUVTSF9JRBIPGg1jbHVzdGVyLmxvY2FsCi8KBE5BTUUSJxolaXN0aW8taW5ncmVzc2dhdGV3YXktNmJiOGZiNjU0OS1oY2RuYwobCglOQU1FU1BBQ0USDhoMaXN0aW8tc3lzdGVtCl0KBU9XTkVSElQaUmt1YmVybmV0ZXM6Ly9hcGlzL2FwcHMvdjEvbmFtZXNwYWNlcy9pc3Rpby1zeXN0ZW0vZGVwbG95bWVudHMvaXN0aW8taW5ncmVzc2dhdGV3YXkKFwoRUExBVEZPUk1fTUVUQURBVEESAioACicKDVdPUktMT0FEX05BTUUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXk='
'x-envoy-peer-metadata-id', 'router~10.10.0.7~istio-ingressgateway-6bb8fb6549-hcdnc.istio-system~istio-system.svc.cluster.local'
'x-envoy-expected-rq-timeout-ms', '500'
'x-envoy-attempt-count', '1'
	thread=38

## upstream timeout 으로 client 에서 끊음 (disconnect)
2025-05-09T09:17:17.262701Z	debug	envoy pool external/envoy/source/common/conn_pool/conn_pool_base.cc:265	[C17947] using existing fully connected connection	thread=38
2025-05-09T09:17:17.262710Z	debug	envoy pool external/envoy/source/common/conn_pool/conn_pool_base.cc:182	[C17947] creating stream	thread=38
2025-05-09T09:17:17.262736Z	debug	envoy router external/envoy/source/common/router/upstream_request.cc:581	[C18119][S12425904214070917868] pool ready	thread=38
2025-05-09T09:17:17.761697Z	debug	envoy router external/envoy/source/common/router/router.cc:947	[C18119][S12425904214070917868] upstream timeout	thread=38 # 업스트림 서버가 설정된 타임아웃 내에 응답하지 않아 요청이 실패
2025-05-09T09:17:17.761762Z	debug	envoy router external/envoy/source/common/router/upstream_request.cc:500	[C18119][S12425904214070917868] resetting pool request	thread=38
2025-05-09T09:17:17.761776Z	debug	envoy connection external/envoy/source/common/network/connection_impl.cc:139	[C17947] closing data_to_write=0 type=1	thread=38
2025-05-09T09:17:17.761779Z	debug	envoy connection external/envoy/source/common/network/connection_impl.cc:250	[C17947] closing socket: 1	thread=38
2025-05-09T09:17:17.761920Z	debug	envoy connection external/envoy/source/extensions/transport_sockets/tls/ssl_socket.cc:320	[C17947] SSL shutdown: rc=0	thread=38
2025-05-09T09:17:17.761982Z	debug	envoy pool external/envoy/source/common/conn_pool/conn_pool_base.cc:484	[C17947] client disconnected, failure reason: 	thread=38
2025-05-09T09:17:17.761997Z	debug	envoy pool external/envoy/source/common/conn_pool/conn_pool_base.cc:454	invoking idle callbacks - is_draining_for_deletion_=false	thread=38

## 504 응답
2025-05-09T09:17:17.762027Z	debug	envoy http external/envoy/source/common/http/filter_manager.cc:967	[C18119][S12425904214070917868] Sending local reply with details response_timeout	thread=38
2025-05-09T09:17:17.762072Z	debug	envoy http external/envoy/source/common/http/conn_manager_impl.cc:1687	[C18119][S12425904214070917868] encoding headers via codec (end_stream=false):
':status', '504'
'content-length', '24'
'content-type', 'text/plain'
'date', 'Fri, 09 May 2025 09:17:17 GMT'
'server', 'istio-envoy'
	thread=38
2025-05-09T09:17:17.762253Z	debug	envoy pool external/envoy/source/common/conn_pool/conn_pool_base.cc:215	[C17947] destroying stream: 0 remaining	thread=38
2025-05-09T09:17:17.763718Z	debug	envoy connection external/envoy/source/common/network/connection_impl.cc:656	[C18119] remote close	thread=38
2025-05-09T09:17:17.763731Z	debug	envoy connection external/envoy/source/common/network/connection_impl.cc:250	[C18119] closing socket: 0	thread=38&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380baaf58ff6c5e986b9d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23807ca8bef4f127164123&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;두 가지 중요한 발견이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ca822ed3c541905bd0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;첫 째, 응답이 느린 업스트림의 IP 주소가 액세스 로그에서 가져온 IP 주소와 일치한다는 점이다. 이는 오동작하는 인스턴스가 딱 하나라는 심증을 더욱 굳힌다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;that the IP address of the upstream that responds slowly matches the IP address retrieved from the access logs, which further solidifies that only one instance is misbehaving instance&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238079b16df805c103779b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;둘 째, 로그 &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;[C17947] client disconnected&lt;/span&gt;&lt;/span&gt; 에 표시된 대로 클라이언트(프록시)는 업스트림 커넥션을 종료했다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;that the client (proxy) terminated the connection to the upstream, as indicated by the log [C17947] client disconnected. &lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a7bd6fdba511e9fe5c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 업스트림 인스턴스가 제한 시간 설정을 초과해 클라이언트(프록시)가 요청을 종료한다는 우리의 예상과 일치한다.(0.5초 timeout 발생하여 요청 종료, ingressgateway입장에서 upstream에 대한 connection 종료) &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This matches our expectation that the client (proxy) is terminating the requests because the upstream instance is exceeding the timeout configuration.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807abd0cd67c10c056f8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b0ac2be84ab9b73b9d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 로거는 프록시 동작을 깊이 꿰뚫는 통찰력을 얻게 해준다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809c8fb6c9e88532a694&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 절에서는 서버측에서 네트워크 트래픽을 조사한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380eea59fdc8cccd4be1f&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380f2b814eff8d96b3792&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380fea2e6d61b6caa6e34&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.3.4 tcpdump로 네트워크 트래픽 검사*&lt;/span&gt;&lt;/span&gt; Inspect network traffic with ksniff &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rArr; 추후 sniff 로 실습 명령 실행으로 변경 해둘 것!&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1f6b8b2c1c2380b09754d75fc251c607&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;목표&lt;/code&gt; : 특정 파드에서 tcpdump 후 wireshark 로 분석해보기&lt;/p&gt;
&lt;div id=&quot;block-1f6b8b2c1c238007a909d0753c83173c&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;i&gt;침고: ksniff + wireshark로 분석하기 - &lt;/i&gt;&lt;i&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kingofbackend.tistory.com/303&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f9815dcaaf15316ea6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;특정 파드에서 tcpdump 후 wireshark 로 불러오기&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807a9b04f012ff234a31&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fb2bbfcf9-d2d3-4074-a931-1ebdcc819697%2FUntitled.png?id=1f6b8b2c-1c23-807a-9b04-f012ff234a31&amp;amp;table=block&quot; alt=&quot;Flow 예시&quot; width=&quot;1200&quot; height=&quot;227.11676812396237&quot; /&gt;Flow 예시&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807e809ae69b4f23d135&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# slow 파드 정보 확인
CATALOG_POD=$(kubectl get pods -l version=v2 -n istioinaction -o jsonpath={.items..metadata.name} | cut -d ' ' -f1)
kubectl get pod -n istioinaction $CATALOG_POD -owide
NAME                         READY   STATUS    RESTARTS   AGE   IP           NODE                  NOMINATED NODE   READINESS GATES
catalog-v2-56c97f6db-868wt   2/2     Running   0          91m   10.10.0.16   myk8s-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;

# catalog 서비스 정보 확인
kubectl get svc,ep -n istioinaction
NAME              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/catalog   ClusterIP   10.200.2.236   &amp;lt;none&amp;gt;        80/TCP    91m

NAME                ENDPOINTS                                         AGE
endpoints/catalog   10.10.0.14:3000,10.10.0.15:3000,10.10.0.16:3000   91m

# istio-proxy 에서 기본 정보 확인
kubectl exec -it -n istioinaction $CATALOG_POD -c istio-proxy -- sudo whoami
kubectl exec -it -n istioinaction $CATALOG_POD -c istio-proxy -- tcpdump -h
kubectl exec -it -n istioinaction $CATALOG_POD -c istio-proxy -- ip -c addr
kubectl exec -it -n istioinaction $CATALOG_POD -c istio-proxy -- ip add show dev eth0
kubectl exec -it -n istioinaction $CATALOG_POD -c istio-proxy -- ip add show dev lo

# istio-proxy 에 eth0 에서 패킷 덤프
kubectl exec -it -n istioinaction $CATALOG_POD -c istio-proxy -- sudo tcpdump -i eth0 tcp port 3000 -nnq
kubectl exec -it -n istioinaction $CATALOG_POD -c istio-proxy -- sudo tcpdump -i eth0 tcp port 3000 -nn
kubectl exec -it -n istioinaction $CATALOG_POD -c istio-proxy -- sudo tcpdump -i eth0 tcp port 3000

# istio-proxy 에 lo 에서 패킷 덤프
kubectl exec -it -n istioinaction $CATALOG_POD -c istio-proxy -- sudo tcpdump -i lo -nnq

# istio-proxy 에 tcp port 3000 에서 패킷 덤프
kubectl exec -it -n istioinaction $CATALOG_POD -c istio-proxy -- sudo tcpdump -i any tcp port 3000 -nnq
kubectl exec -it -n istioinaction $CATALOG_POD -c istio-proxy -- sudo tcpdump -i any tcp port 3000 -nn

#
kubectl describe pod -n istioinaction $CATALOG_POD
...
    Mounts:
      /etc/istio/pod from istio-podinfo (rw)
      /etc/istio/proxy from istio-envoy (rw)
      /var/lib/istio/data from istio-data (rw)
      /var/run/secrets/credential-uds from credential-socket (rw)
      /var/run/secrets/istio from istiod-ca-cert (rw)
      /var/run/secrets/tokens from istio-token (rw)
      /var/run/secrets/workload-spiffe-credentials from workload-certs (rw)
      /var/run/secrets/workload-spiffe-uds from workload-socket (rw)
...

# istio-proxy 에 tcp port 3000 에서 패킷 덤프에 출력 결과를 파일로 저장 
kubectl exec -it -n istioinaction $CATALOG_POD -c istio-proxy -- sudo tcpdump -i any tcp port 3000 -w /var/lib/istio/data/dump.pcap
kubectl exec -it -n istioinaction $CATALOG_POD -c istio-proxy -- ls -l /var/lib/istio/data/

total 44
-rw-r--r-- 1 tcpdump tcpdump 42852 May 17 07:36 dump.pcap

# 출력 결과 파일을 로컬로 다운로드
kubectl cp -n istioinaction -c istio-proxy $CATALOG_POD:var/lib/istio/data/dump.pcap ./dump.pcap

# 로컬로 다운 받은 파일을 wireshark 로 불러오기
wireshark dump.pcap
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;a id=&quot;block-1f6b8b2c1c238048b8c4c01235d5e179&quot; class=&quot;notion-link notion-file&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; border-radius: 3px; color: inherit;&quot; href=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/23390dd2-534d-421f-9e57-39ea70f552bd/dump.pcap?table=block&amp;amp;id=1f6b8b2c-1c23-8048-b8c4-c01235d5e179&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=xwErHUo2l6k1LCtJ7Fev2ZN377ODL2JPwaole7W7Vdg&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
&lt;div style=&quot;box-sizing: border-box; display: flex; padding: 5px 0px; margin: 2px 0px; transition: background 120ms ease-in; border-radius: 3px;&quot;&gt;
&lt;div class=&quot;notion-file__icon&quot; style=&quot;box-sizing: border-box; margin-inline: 2px 4px; width: 1.5rem; text-align: center;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem;&quot; class=&quot;notion-file__title&quot;&gt;dump.pcap&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; margin-inline-start: 6px; color: #7d7c78; font-size: 0.75rem;&quot; class=&quot;notion-file__size&quot;&gt;41.8KB&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/a&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a4bc6cdb69fb3608de&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380cfa840f8e5357e2058&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Wireshark 에서 TLS 암호 통신 확인 :&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; istio-ingressgateway&lt;/span&gt; &amp;rarr; [ &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;(캡처 지점)&lt;/code&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio-proxy&lt;/span&gt; &amp;rArr; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;catalog application&lt;/span&gt; ]&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1f6b8b2c1c238037a755d4617027ccc7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fb2bbfcf9-d2d3-4074-a931-1ebdcc819697%2FUntitled.png?id=1f6b8b2c-1c23-8037-a755-d4617027ccc7&amp;amp;table=block&quot; alt=&quot;Flow 예시&quot; width=&quot;960&quot; height=&quot;181.6934144991699&quot; /&gt;Flow 예시&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804eb04cdbfd6314cba9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Client Hello (SNI 확인) : EDS 의 클러스터 이름으로 접속! &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;outbound_.80_.version-v2_.catalog.istioinaction.svc.cluster.local&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a98929cc2f6501df23&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI에 값 형태를 추정?&lt;/span&gt;&lt;/i&gt;&lt;i&gt;해보면, https 통신 시 &lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EDS 기준 요청에 대한 통제를 SNI에서 값을 기준&lt;/span&gt;&lt;/i&gt;&lt;i&gt;하기 위해서, 좀 더 상세한 출력으로 보임&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1f6b8b2c1c23802983dcf44da7ee7aab&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/4999ac45-9a54-46ec-ae5b-a37ef5ed50a8/CleanShot_2025-05-09_at_21.50.582x.png?table=block&amp;amp;id=1f6b8b2c-1c23-8029-83dc-f44da7ee7aab&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=eSBfks4mixPet2bmoah5CDReYivHJFyDQZ67VpErijo&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;403.2&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380648d68c6a014c002a9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380bbbf5ffff2ca7a2682&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;암호화된 내용 확인 : Encrypted Application Data 에 값 확인&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380ab8741efbc764414b9&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/59f48ced-d76e-4f6a-9f58-aa26135b2c85/CleanShot_2025-05-09_at_21.48.442x.png?table=block&amp;amp;id=1f6b8b2c-1c23-80ab-8741-efbc764414b9&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=CbCduLm8j__tgv22MvjvwNjSwaKFa10FCI5f3BaZitk&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;373.9391480730223&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23806294aed4edcc335f66&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800da5cfe339aba710b1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Wireshark 에서 평문 통신 확인 :&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; istio-ingressgateway&lt;/span&gt; &amp;rarr; [ &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio-proxy&lt;/span&gt; &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;(캡처 지점)&lt;/code&gt; &amp;rArr; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;catalog application&lt;/span&gt; ]&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1f6b8b2c1c23808098e7e0d5ff3afac7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fb2bbfcf9-d2d3-4074-a931-1ebdcc819697%2FUntitled.png?id=1f6b8b2c-1c23-8080-98e7-e0d5ff3afac7&amp;amp;table=block&quot; alt=&quot;Flow 예시&quot; width=&quot;1152&quot; height=&quot;218.03209739900387&quot; /&gt;Flow 예시&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238031a757f7b44f7ea347&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istio-proxy 가 HTTPS를 복호화해서 평문으로 애플리케이션으로 요청 : x-envoy, x-b3 등 헤더 추가 확인&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e8a05fc9111898795e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/cc217833-15c1-4315-81f9-ab6f7d4f41f1/CleanShot_2025-05-09_at_21.57.532x.png?table=block&amp;amp;id=1f6b8b2c-1c23-80e8-a05f-c9111898795e&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=6W6jRKh_8EKDZ-7BE-aKNmKnB351wLCL5Ym4P7f6pEc&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;390.1782178217822&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a0baa3ec711698b722&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380639291f4d733195d67&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;GET /items 패킷에서 우클릭 후 Follow &amp;rarr; TCP Stream 클릭해서 해당 스트림(TCP) 필터링&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803c93b1c5015c7e9304&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/d71faad6-4cf8-4653-a695-f12e029b55e5/CleanShot_2025-05-09_at_23.08.082x.png?table=block&amp;amp;id=1f6b8b2c-1c23-803c-93b1-c5015c7e9304&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=LM2ijHod5duLcmhkMl3gbsbYlQVcPjMjFenSfznPBpo&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;242.21290863369657&quot; /&gt;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b986a4df6dc4dd3c3d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Statistics &amp;rarr; Flow Graph 확인 : 정상적으로 GET 요청과 200 응답 확인&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1f6b8b2c1c238064a8bcc9bfd322a046&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/8537d6a8-c9a2-46c8-b253-23414e92a842/image.png?table=block&amp;amp;id=1f6b8b2c-1c23-8064-a8bc-c9bfd322a046&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=N3fXSlf_TfjvMVx9elUJrnheaJKod2cyEK0e-r86ibM&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;350.3577712609971&quot; /&gt;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380949669c85848241df0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;필터 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;(tcp.stream == &lt;/code&gt;&lt;span style=&quot;box-sizing: border-box; color: #8f64af;&quot; class=&quot;highlighted-color color-purple&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: inherit; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt; and http)&lt;/code&gt; 사용 &amp;larr; 숫자 &lt;span style=&quot;box-sizing: border-box; color: #8f64af;&quot; class=&quot;highlighted-color color-purple&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1&lt;/span&gt;&lt;/span&gt;은 각자 스트림 필터링 값 입력&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807098e4d9bb807c02f7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/81b86203-7b3c-4e4b-a4dc-78ecbeeeeee8/image.png?table=block&amp;amp;id=1f6b8b2c-1c23-8070-98e4-d9bb807c02f7&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=Xk5MaOTwVLwVFr3gkUHOlzvHnvM4XNkorONHRrM8kYw&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;423.4520547945205&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380ef9ffae32c310c12fc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804486d4fb42cf8a3004&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;catalog v2 가 늦게 응답을 해서 istio-proxy 가 timeout 으로 먼저 종료 확인&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e0b46ffeea33592f84&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fb2bbfcf9-d2d3-4074-a931-1ebdcc819697%2FUntitled.png?id=1f6b8b2c-1c23-80e0-b46f-feea33592f84&amp;amp;table=block&quot; alt=&quot;Flow 예시&quot; width=&quot;960&quot; height=&quot;181.6934144991699&quot; /&gt;Flow 예시&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806bb758f30d862ef381&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;필터 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;((tcp.stream == 1 and http) or tcp.flags == 0x0011 or tcp.flags == 0x0004)&lt;/code&gt; : TCP RST, FIN/ACK 플래그 필터링 추가&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1f6b8b2c1c23809babf2d3cce12af4cb&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/4882d220-3e5f-4d84-b196-8de51945d160/CleanShot_2025-05-09_at_23.16.12.png?table=block&amp;amp;id=1f6b8b2c-1c23-809b-abf2-d3cce12af4cb&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=Gm9ZZnEl1fQQ6AVv8j92teInFUCWfuv_7VIXqWNnKR8&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;233.7&quot; /&gt;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803fa227c984b333ca7d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;No. 38번에서 요청 후 0.5초 이상 응답이 없으니 (42번)44번에 istio-ingressgateway istio-proxy 가 TCP RST 로 연결 종료&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1f6b8b2c1c2380d18e35e81d17dbf11e&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&amp;rArr; 즉, 현재 구성 상 istio-ingressgw &amp;rarr; catalog 이므로, istio-ingressgw 가 TCP Timeout 후 종료 처리함&lt;/i&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803faa88c5de164c06ae&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이후 45번은 catalog v2 istio-proxy 가 FIN/ACK를 applcation 에게 전달 이후 연결 종료&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1f6b8b2c1c238024a110c4f370d67276&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 959.047px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1f6b8b2c1c2380169d9dcd72d1ec21c5&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TCP control flags&lt;/span&gt; TCP 제어 플래그는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;커넥션의 특정 상태&lt;/span&gt;를 나타낸다. 여기서 볼 수 있는 플래그는 다음과 같다. - Synchronization (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SYN&lt;/span&gt;)은 커넥션을 새로 수립하는 데 사용한다. - Acknowledgment (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ACK&lt;/span&gt;)는 패킷 수신이 성공했음을 확인하는 데 사용한다. - Finish (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FIN&lt;/span&gt;)는 커넥션 종료를 요청하는 데 사용한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23809d9a1ce37c2e5cd2d1&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/1f89f8db-69fa-49c7-a1ac-401802199b0b/image.png?table=block&amp;amp;id=1f6b8b2c-1c23-809d-9a1c-e37c2e5cd2d1&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=QuqfdnbJyqPuyEx9r475jICWO7BBzsIoiiJVKDH4NLA&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;100.42247191011236&quot; /&gt;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800b88f4e69cda055579&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;54번과 61번 사이에 0.5초 이상의 delay가 발생하여 istio-ingressgateway의 istio-proxy가 catalog-v2의 istio-proxy로 RST packet을 보냄&lt;/li&gt;
&lt;/ol&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809592adfb4e8025af5f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kiali 확인&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d9a4dfde69f0924251&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/04d175c3-1862-4d5b-afaf-1416ed6a8f37/CleanShot_2025-05-09_at_23.20.26.png?table=block&amp;amp;id=1f6b8b2c-1c23-80d9-a4df-de69f0924251&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=M1C5kQuD0PscXamC2P9PdovWABzH-iv4jvCHOE-D9_I&quot; alt=&quot;image&quot; width=&quot;816&quot; height=&quot;401.61668839634945&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238025b09eca73a5ba46de&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d48adfcfc711eb8194&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;jaeger ui&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1f6b8b2c1c238031ade3eb821c137daf&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/ef084b42-53a7-43f3-913b-32ac133850f6/image.png?table=block&amp;amp;id=1f6b8b2c-1c23-8031-ade3-eb821c137daf&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=Lor96gQkhnA975mMf--lXYiVAhpeNU3zSQUImgYO-uQ&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;273.2727272727273&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23800d8cd8d727e7da365a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f18bf4c01f1f1cbfd5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네트워크 트래픽을 검사하면 앞 서 관찰한 두 가지를 모두 확인할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380fe98fbd47c2eecfe87&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클라이언트가 커넥션 종료를 시작했고, 서비는 요청 응답이 느렸다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803ab0ced6f4cd392c59&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 절에서는 이 문제가 드문 문제인지, 즉시 주의를 기울여야 하는 빈번한 문제인지 파악하기 위해 서버를 성공률을 조사한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a9a9fcf815e121c2ed&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1f6b8b2c1c23809f8f89d458c4663d62&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;10.4. 엔보이 텔레메트리로 자신의 애플리케이션 이해하기&lt;/p&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803dbccff66f65ca3412&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.4.1 그라파나에서 실패한 요청 비율 찾기&lt;/span&gt; Finding the rate of failing requests in Grafana&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380509c72feba8510b84e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Grafana - Istio Service 대시보드 &amp;rArr; Service(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;catalog.istioinaction..&lt;/span&gt;) , Reporter(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;source&lt;/span&gt;) 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238014beb2d79737e26f0e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/c0aa0fbf-a859-486c-a9f4-599f3f4033cc/CleanShot_2025-05-10_at_00.53.44.png?table=block&amp;amp;id=1f6b8b2c-1c23-8014-beb2-d79737e26f0e&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=4zACi0qdXK26DQOIWMPgyRVhAZZw6MV4htI3AuEMBq0&quot; alt=&quot;image&quot; width=&quot;695.9943237304688&quot; height=&quot;82.99932308854727&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809ea9a2c1c9de4981cb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라이언트 성공률&lt;/span&gt;은 요청 중 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;70%&lt;/span&gt; 정도(아래 스샷은 79%)로 &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;30% 정도 실패. &amp;rArr; Client 응답에 5xx가 30% 정도 있음 &lt;/span&gt;&lt;i&gt;상태 코드 504 (&amp;rsquo;Gateway timeout&amp;rsquo;)로 표기되어 클라이언트 측 실패율에 반영. 즉, istio-ingressgateway의 envoy-proxy에서 504 response가 찍힘&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b1b1fce077768b2aef&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/5792bbad-e475-4277-a349-352ff7dc1092/CleanShot_2025-05-10_at_00.54.14.png?table=block&amp;amp;id=1f6b8b2c-1c23-80b1-b1fc-e077768b2aef&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=DL3g3XhpWIVgMxVA_Fshd8bq4qtnnPwl97dKaBu0Rec&quot; alt=&quot;image&quot; width=&quot;458.991455078125&quot; height=&quot;165.99690967967047&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238060bcb1c1c20b69a721&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서버 성공률&lt;/span&gt;은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;100%&lt;/span&gt;, 즉 서버 문제는 아님 &amp;rArr; Server 응답에는 5xx 없음. &lt;i&gt;엔보이 프록시가 다운스트림 종료 요청(ingressgateway에서의 connection 종료)에 대한 응답 코드를 0으로 표시하며, 이는 5xx 응답이 아니라서 실패율에 포함되지 않는다. 즉, catalog envyo-proxy내에서는 response code에 0으로 표시&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238008b322e4e2a87150d2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/3cecc9ce-88df-4a2e-bdaa-c033041f1ae5/CleanShot_2025-05-10_at_00.56.30.png?table=block&amp;amp;id=1f6b8b2c-1c23-8008-b322-e4e2a87150d2&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=cyUHyGwnPt_RvyB9sMcAX6xsR-kJopzVjfvMYycjM0c&quot; alt=&quot;image&quot; width=&quot;445.9516906738281&quot; height=&quot;153.98331920127697&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380288e78d3a80ffc5b53&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;[&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인그레스 게이트웨이&lt;/span&gt; : 응답 플래그 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;UT&lt;/span&gt;, 상태 코드 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;504&lt;/span&gt;] &amp;rArr; (요청 타임아웃) &amp;rArr; [&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;catalog v2&lt;/span&gt; : 응답 플래그 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DC&lt;/span&gt;, 상태 코드 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;0&lt;/span&gt;]&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23802198fced5666e0ad60&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/fd93ef4b-7b40-47fd-9f5e-7c6cddfa53f0/CleanShot_2025-05-10_at_01.00.53.png?table=block&amp;amp;id=1f6b8b2c-1c23-8021-98fc-ed5666e0ad60&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=YDVsbz3rLEh-1s-tHSDlKWeG6o0-uTwsf_8OplI0tuE&quot; alt=&quot;클라이언트와 서버가 설정한 응답 플래그와 응답 코드의 차이점&quot; width=&quot;816&quot; height=&quot;140.07629427792915&quot; /&gt;클라이언트와 서버가 설정한 응답 플래그와 응답 코드의 차이점&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23805aa8f0f65359baeb09&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380629c28c22e223b7405&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;정리하면, 올바른 값은 클라이언트가 보고하는 성공률이라는 것을 알 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238002b2c7f2b83dfda636&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실패율이 20~30%이면 즉시 주의를 기울여야 한다!&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806b9435f99be15673e5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;현재 그라파나 대시보드&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;catalog 서비스에 속한 모든 워크로드(v1,v2)의 성공률&lt;/span&gt;을 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b2b8d7d4110153aea7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;문제가 있는 단일 인스턴스를 식별&lt;/span&gt;하려면 좀 더 상세한 출력이 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380569d46eb040ddb0b8c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238002a0d7c74b84a258cc&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.4.2 프로메테우스를 사용해 영향받는 파드 쿼리하기&lt;/span&gt; Querying the affected Pods using Prometheus&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802c8b84f35d2f558be9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그라파나 대시보드의 정보가 부족하면 프로메테우스에 직접 쿼리할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800cbc27e25743136fb7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 파드 별 실패율을 쿼리해보자. 다음 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기준&lt;/span&gt;을 충족하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭을 쿼리&lt;/span&gt;해보자.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800da69ceec59e13118d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;destination 이 보고한 요청&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809aaf89fcb499bff8df&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;destination 서비스가 catalog 인 요청&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380188997f54014dfb3ee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;응답 플래그가 &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DC&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;(다운스트림 커넥션 종료)&lt;/span&gt;인 요청 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rArr; 서버 입장에서는 응답을 하려는데, 클라이언트가 먼저 끊어 버린 것!&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380818c33ee2e22ead3d2&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;lisp&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;sort_desc( # 가장 높은 값부터 내림차순 정렬
  sum( # irate 값들을 집계
    irate( #  요청 수 초당 증가율
      istio_requests_total {
        reporter=&quot;destination&quot;,   # 서버(destination) 측에서 보고한 메트릭만 필터링
        destination_service=~&quot;catalog.istioinaction.svc.cluster.local&quot;,   # catalog 가 서버(destination)측인 메트릭만 필터링
        response_flags=&quot;DC&quot;       # DC (다운스트림 커넥션 종료)로 끝난 메트릭만 필터링
      }[5m]
    )
  )by(response_code, pod, version) # 응답 코드(response_code), 대상 pod, 버전(version) 별로 분리 =&amp;gt; sum.. 합산
)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23801aabc4e740ee820c85&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 쿼리1
istio_requests_total
istio_requests_total{reporter=&quot;destination&quot;, destination_service=~&quot;catalog.istioinaction.svc.cluster.local&quot;}
istio_requests_total{reporter=&quot;destination&quot;, destination_service=~&quot;catalog.istioinaction.svc.cluster.local&quot;,response_flags=&quot;DC&quot;}

# 쿼리2
istio_requests_total{reporter=&quot;destination&quot;, destination_service=~&quot;catalog.istioinaction.svc.cluster.local&quot;,response_flags=&quot;DC&quot;}[5m]
irate(istio_requests_total{reporter=&quot;destination&quot;, destination_service=~&quot;catalog.istioinaction.svc.cluster.local&quot;,response_flags=&quot;DC&quot;}[5m])
sum(irate(istio_requests_total{reporter=&quot;destination&quot;, destination_service=~&quot;catalog.istioinaction.svc.cluster.local&quot;,response_flags=&quot;DC&quot;}[5m]))

# 쿼리3
sum(irate(istio_requests_total{reporter=&quot;destination&quot;, destination_service=~&quot;catalog.istioinaction.svc.cluster.local&quot;,response_flags=&quot;DC&quot;}[5m])) by(response_code, pod, version)
sort_desc(sum(irate(istio_requests_total{reporter=&quot;destination&quot;, destination_service=~&quot;catalog.istioinaction.svc.cluster.local&quot;,response_flags=&quot;DC&quot;}[5m]))by(response_code, pod, version))
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23800a8bd5cbfdde878400&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/5c093618-3e73-403a-8a7c-dc37678191da/image.png?table=block&amp;amp;id=1f6b8b2c-1c23-800a-8bd5-cbfdde878400&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=nMt8AqJWe-AJpLqY8vQo5tLuxk4eVKqbYlox4OLM-zA&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;426.66666666666663&quot; /&gt;&lt;/div&gt;
&lt;p id=&quot;block-1f6b8b2c1c2380c6ae9ae413052b2870&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 해당 그래프는 오직 워크로드 하나만 실패를 보고 하고 있음을 보여준다.&lt;/p&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380539201f434ff4eeaf2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238027af0bdca97f4f14af&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;퀴리를 조금 수정해서 확인 : 여러 개 파드 중 catalog v2 만 응답 코드 0 기록 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380789040f49eefca1a03&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;lisp&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;sort_desc(sum(irate(istio_requests_total{reporter=&quot;destination&quot;, destination_service=~&quot;catalog.istioinaction.svc.cluster.local&quot;}[5m]))by(response_code, pod, version))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238042a8b8c4650caa4b3d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/92880e40-7076-4a55-ba6b-f1c9b8bb3e98/image.png?table=block&amp;amp;id=1f6b8b2c-1c23-8042-a8b8-c4650caa4b3d&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=QpT6Az2tmCY8p9Dr7G8b21clzhy_u2O70zPhDjaVdM0&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;447.9615153337342&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380fdb7a3c719daf15893&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 표준 메트릭에 필요한 정보가 없으며, 7장의 7.4절에서 소개한 방법처럼 커스텀 메트릭을 추가할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380fd94f8e85cf25909cb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 프로메테우스 클라이언트 라이브러리를 사용해 애플리케이션에 모니터링을 원하는 대로 설정할 수도 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e1964ae320586cf457&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801baacecfa4dd15032f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이것으로 데이터 플레인을 트러블슈팅하는 데 흔히 사용하는 도구 탐색을 마치겠다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238093b94ac9e57d64dac1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다양한 데이터 플레인 문제가 이전에는 블랙박스철머 보였을 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809c9ae6f1193aef0a68&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;하지만 지금부터 이런 문제를 마주했을 때 자신감을 갖고 명확한 출발점을 찾을 수 있어야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238094bcf7cfe3b1cd94e8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스터이 작동 방식을 깊이 이해하고 적절한 도구가 있다면, 데이터 플레인 문제 디버깅이 휠씬 쉬워진다. (단, 결코 쉬운 일은 아니다)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e798cac0afe63d0a3a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e4bccadf0568441222&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 장에서는 컨트롤 플레인에서 일어나는 문제를 해결하는 방법을 알아본다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d38b11e4581c6df6fa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 메시 내 워크로드 개수가 늘어나면 컨트롤 플레인이 따라서 확장될 수 있도록 함으로써, 컨트롤 플레인 성능을 개선하는 방법을 알아본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238090accade2b9bc5298a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e1af46de8c0f01ffcc&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Summary&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804ba924c7b9c63534e6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istioctl 명령어를 사용해 서비스 메시와 서비스 프록시에 대한 통찰력을 얻는다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801d8481cd9c5ae7ed4b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;proxy-status 는 데이터 플레인 동기화 상태의 개요를 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380749961ed0caa12b86c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;analyze는 서비스 메시 설정을 분석한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800aa8e6fddf16bfd3ec&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;describe는 요약을 가져오고 서비스 프록시 설정을 검증한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23807c8344c0ae1da84b89&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;proxy-config는 서비스 프록시 설정을 쿼리하고 수정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1f6b8b2c1c238038a781ea5f5179994f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istioctl analyze 명령을 사용해 클러스터에 적용하기 전에 설정을 검증할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238060a560f137c135ad51&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;키알리와 그 검증 기능을 사용해 일반적인 설정 실수를 잡아낼 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23807593f1ccaa617c5ed7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;장애 상황을 살펴보려면 프로메테우스와 수집한 메트릭을 사용하자.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f4ac54ff0db4fed61a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ksniff(tcpdump)를 사용해 영향을 받는 파드의 네트워크 트래픽을 캡처할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e08b79c4fa733d9dc5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istioctl proxy-config log 명령어를 사용해 엔보이 프록시의 로깅 수준을 높일 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380108f03c6f5a0cf9474&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23802898b9de4e13496247&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238025a883e79f52545eea&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1f6b8b2c1c2380008b21e70e0c90e382&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.D. 이스티오 구성 요소 트러블 슈팅하기&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b0976aff65accc6cf6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Internal Architecture by Port : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istiod(컨트롤플레인) + Istio Proxy(데이터플레인) 도식화 - &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.anyflow.net/sw-engineer/istio-internals-by-port&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380799c5fc210d630335e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://www.anyflow.net/sw-engineer/istio-internals-by-port&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/dbe6a975-295d-4b0c-af0d-cfba7abf5e1b/image.png?table=block&amp;amp;id=1f6b8b2c-1c23-8079-9c5f-c210d630335e&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=eOhVS3BgCK9J6_8dAeZl2dZ4XiXdfTdI-N1KPNzQkW0&quot; alt=&quot;https://www.anyflow.net/sw-engineer/istio-internals-by-port&quot; width=&quot;864&quot; height=&quot;609.609375&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23800d95a7ef079bbd5e9c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a083f5ff3d088bc655&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.D.1 이스티오 에이전트(DataPlane 위치에서 확인)가 노출하는 정보&lt;/span&gt; Information exposed by the Istio agent &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습~)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238069994fccfa820452f0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습 환경 초기화&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d1a0fcdf2d53794483&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;sql&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 기존 리소스 삭제
kubectl delete -n istioinaction deploy,svc,gw,vs,dr,envoyfilter --all

# 샘플 애플리케이션 배포
kubectl apply -f services/catalog/kubernetes/catalog.yaml -n istioinaction
kubectl apply -f services/webapp/kubernetes/webapp.yaml -n istioinaction
kubectl apply -f services/webapp/istio/webapp-catalog-gw-vs.yaml -n istioinaction

# 확인
kubectl get gw,vs -n istioinaction
NAME                                            AGE
gateway.networking.istio.io/coolstore-gateway   3m11s

NAME                                                       GATEWAYS                HOSTS                         AGE
virtualservice.networking.istio.io/webapp-virtualservice   [&quot;coolstore-gateway&quot;]   [&quot;webapp.istioinaction.io&quot;]   3m11s

curl -s http://webapp.istioinaction.io:30000/api/catalog | jq

# 신규 터미널 : 반복 접속
while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803bb646e3eeceb05295&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809eaf1ce75e93db0d64&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오 사이드카&lt;/span&gt;는 많은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기능&lt;/span&gt;을 제공한다.
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809da653c262b3954cc2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시로서의 엔보이는 트래픽을 처리할 수 있는 즉시 준비 상태다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380bfb096cc26878fbec7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 서비스 메시의 관점에서 보면 이 정도로는 충분하지 않다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380678cb4eed9ec0651e1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시가 트래픽을 처리하기 전에 설정을 받았는지, ID를 할당받았는지 등의 더 많은 확인이 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238028aa9dfe7884029418&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 내에서 메트릭을 생성하는 세 가지 구성 요소는 애플리케이션, 에이전트, 엔보이 프록시다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380aeb061eb92f75a3ca4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;에이전트는 다른 구성 요소의 메트릭을 집계해 노출한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b28410caf4c5ddde9f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;헬스체크&lt;/span&gt; Health checking&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380c4be9dc89a02a1bf3b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭 수집 및 노출&lt;/span&gt; Metrics collection and exposure&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a5bd02f829dc10d7c9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;DNS &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;resolution&lt;/span&gt; 해석, 인바운드 및 아웃바운드 트래픽 라우팅 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380f1899eea257d1f5041&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380049dcff4826e871ae2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 노출 포트 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238004b257fe7a4e997fe2&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl -n istioinaction exec -it deploy/webapp -c istio-proxy -- netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:15000         0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:15004         0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15021           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15021           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15001           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15001           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15006           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15006           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15090           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15090           0.0.0.0:*               LISTEN     
tcp6       0      0 :::15020                :::*                    LISTEN     
tcp6       0      0 :::8080                 :::*                    LISTEN   

# 포트별 프로세스 확인 : 파일럿에이전트, 엔보이
kubectl -n istioinaction exec -it deploy/webapp -c istio-proxy --  ss -tnlp
State                Recv-Q               Send-Q                             Local Address:Port                                Peer Address:Port               Process                                            
LISTEN               0                    4096                                   127.0.0.1:15000                                    0.0.0.0:*                   users:((&quot;envoy&quot;,pid=21,fd=18))                    
LISTEN               0                    4096                                   127.0.0.1:15004                                    0.0.0.0:*                   users:((&quot;pilot-agent&quot;,pid=1,fd=11))               
LISTEN               0                    4096                                     0.0.0.0:15021                                    0.0.0.0:*                   users:((&quot;envoy&quot;,pid=21,fd=25))                    
LISTEN               0                    4096                                     0.0.0.0:15021                                    0.0.0.0:*                   users:((&quot;envoy&quot;,pid=21,fd=24))                    
LISTEN               0                    4096                                     0.0.0.0:15001                                    0.0.0.0:*                   users:((&quot;envoy&quot;,pid=21,fd=36))                    
LISTEN               0                    4096                                     0.0.0.0:15001                                    0.0.0.0:*                   users:((&quot;envoy&quot;,pid=21,fd=35))                    
LISTEN               0                    4096                                     0.0.0.0:15006                                    0.0.0.0:*                   users:((&quot;envoy&quot;,pid=21,fd=38))                    
LISTEN               0                    4096                                     0.0.0.0:15006                                    0.0.0.0:*                   users:((&quot;envoy&quot;,pid=21,fd=37))                    
LISTEN               0                    4096                                     0.0.0.0:15090                                    0.0.0.0:*                   users:((&quot;envoy&quot;,pid=21,fd=23))                    
LISTEN               0                    4096                                     0.0.0.0:15090                                    0.0.0.0:*                   users:((&quot;envoy&quot;,pid=21,fd=22))                    
LISTEN               0                    4096                                           *:15020                                          *:*                   users:((&quot;pilot-agent&quot;,pid=1,fd=7))                
LISTEN               0                    4096                                           *:8080                                           *:*               

# istio-proxy 컨테이너에 Readiness Probe 정보 확인 : 15021 헬스체크 포트
kubectl describe pod -n istioinaction -l app=webapp | grep Readiness:
    Readiness:  http-get http://:15021/healthz/ready delay=1s timeout=3s period=2s #success=1 #failure=30&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23804ba664cc28f1c9de41&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238065903ee925a1fed881&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;에이전트 및 엔보이 프록시의 포트와 각 포트의 기능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238060b657e6a9fe699963&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/f6036369-1b72-43bb-bf71-286a5d239491/CleanShot_2025-05-10_at_15.44.52.png?table=block&amp;amp;id=1f6b8b2c-1c23-8060-b657-e6a9fe699963&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=cdp-74ajSaWtI--qmUbs6NWhiUZnoRkncs0qgCUdyrM&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;768.239103362391&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23805e830edb89982ae348&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스용 포트&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; Ports facing other services&lt;/span&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802eba88c5ec1614870b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭을 집계하고 노출&lt;/span&gt;하며, 이때 메트릭에는 엔보이 프록시의 15090 포트에 쿼리한 메트릭, 애플리케이션 메트릭(설정한 경우), 자체 메트릭이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e78b0fde6043da2eef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 및 DNS 프록시를 헬스 체크&lt;/span&gt;. 이 엔드포인트에서 애플리케이션도 헬스 체크하도록 프록시를 설정할 수 있지만, 보통은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;가상머신&lt;/span&gt;과 같이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;쿠버네티스가 아닌 워크로드에만 사용&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ad9e1ed4e7a1f84d3b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 개발 팀에 유용한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;파일럿 에이전트 디버깅용 엔드포인트&lt;/span&gt;로, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메모리&lt;/span&gt; 정보, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CPU&lt;/span&gt; 프로파일링 등과 같은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;정보를 노출&lt;/span&gt;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380538466d71ab59d020f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞서 설명한 것처럼 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 프록시&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;헬스 체크&lt;/span&gt;를 15020 포트의 파일럿 에이전트로 라우팅하며, 실제 헬스 체크는 여기서 일어난다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;the Envoy proxy routes the health checks to the Pilot agent on port 15020, where the actual healthchecking occurs.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23805ab6e5edecc13336f4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;15020&lt;/span&gt; : (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;파일럿 에이전트 프로세스&lt;/span&gt;) &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;여러 기능 제공!&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ebbfbee2ae179966c3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;15021&lt;/span&gt; : (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 프로세스&lt;/span&gt;) 사이드카 주입된 파드는 이 포트에서 트래픽을 받을 준비가 됐는지 확인하도록 설정된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Pods with the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;sidecar&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; injected are configured to &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;check&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; their &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;readiness&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; to receive traffic on this port.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380c08a45f6fa499a907a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;15053&lt;/span&gt; : (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;파일럿 에이전트 프로세스&lt;/span&gt;) 쿠버네티스 DNS 해석이 충분하지 않은 에지 케이스를 해결하기 위해 istiod가 구성한 로컬 DNS 프록시 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Local DNS proxy&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; configured by &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; to &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;resolve&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;edge&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; cases where Kubernetes DNS resolution doesn&amp;rsquo;t suffice.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b8bdddd6bab6b5f5c3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;15001&lt;/span&gt; : (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 프로세스&lt;/span&gt;) 애플리케이션에서 나가는 트래픽은 Iptable 규칙에 의해 일단 이 포트로 리다이렉트되며, 이후 프록시가 트래픽을 서비스로 라우팅한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801b9104f4d31f61fe87&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;15006&lt;/span&gt; : (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 프로세스&lt;/span&gt;) 애플리케이션으로 들어오는 트래픽은 Iptable 규칙에 의해 일단 이 포트로 리다이렉트되며, 여기서 로컬 애플리케이션 라우팅된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238051b4e2c81d43a50e62&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e4bca2dac855721042&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;에이전트 디버깅 및 내부 상태 조사에 유용한 포트 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; useful for debugging and introspecting the agent&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809ca8ddc1b5df8f435d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;15000 : (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 프로세스&lt;/span&gt;) 엔보이 프록시 관리 인터페이스&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23805b8d3deb6c46f12b86&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;15090 : (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 프로세스&lt;/span&gt;) 엔보이 프록시 메트릭을 노출 (xDS 통계, 커넥션 통계, HTTP 통계, 이상값 outlier 통계, 헬스 체크 통계, 서킷 브레이커 통계 등)&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f39cd3e7f68dc93977&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;15004 : (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;파일럿 에이전트 프로세스&lt;/span&gt;) 에이전트를 통해 이스티오 파일럿 디버그 엔드포인트를 노출. 파일럿과의 연결 문제를 디버깅에 유용.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803a93c8c90a3a18d880&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;15020 : (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;파일럿 에이전트 프로세스&lt;/span&gt;) 파일럿 에이전트 디버기용 엔드포인트들을 노출.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380388da2e66014200d85&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c19212ecf53d14f6dc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;D.1.1 이스티오 에이전트를 조사하고 트러블슈팅하기 위한 엔드포인트들&lt;/u&gt;&lt;/span&gt; Endpoints to introspect and troubleshoot the Istio agent&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380899203d842042b15b9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;15020 포트의 엔드포인트들
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806ca8ace721da10b3db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이느 워크로드가 클라이언트 요청을 처리할 준비가 됐는지 확인하기 위한 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380fd990dea81f617fe8d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션이 쿠버네티스 프로브를 정의하면 istiod mutating 웹훅이 정보를 추출해 이 환경 변수로 프로브를 설정한다 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/ops/configuration/mesh/app-health-check/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d4816bcbdbe5bc1a2d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러므로 에이전트는 이 경로로의 퀴리를 애플리케이션으로 리다이렉트한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238080ab98d21ef92b06d5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/healthz/ready&lt;/code&gt; : 엔보이 및 DNS 프록시에서 일련의 검사를 수행한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d2b08ac28b2e65e1df&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/stats/prometheus&lt;/code&gt; : 엔보이 프록시와 애플리케이션의 메트릭을 자체 메트릭과 병합하고 긁어갈 수 있도록 노출한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800a9a46eba70ec812c6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/quitquitquit&lt;/code&gt; : 파일럿 에이전트의 프로세스를 종료시킨다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238095b897f60be97dd8a6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/app-health/&lt;/code&gt; : 이스티오 프록시 사이드카의 환경 변수 ISTIO_KUBE_APP_PROBERS로 정의한 애플리케이션 프로브를 실행한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b2adaed04243c115fc&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl apply -f - &amp;lt;&amp;lt;EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: liveness-http
  namespace: istioinaction
spec:
  selector:
    matchLabels:
      app: liveness-http
      version: v1
  template:
    metadata:
      labels:
        app: liveness-http
        version: v1
    spec:
      containers:
      - name: liveness-http
        image: docker.io/istio/health:example
        ports:
        - containerPort: 8001
        livenessProbe:
          httpGet:
            path: /foo
            port: 8001
          initialDelaySeconds: 5
          periodSeconds: 5
EOF

#
kubectl get pod -n istioinaction -l app=liveness-http
kubectl describe pod -n istioinaction -l app=liveness-http
...
Containers:
  liveness-http:
    Container ID:   containerd://edaf01bff5d553e03290b3d44f60bb26958319e615a27a9b38309aad9b2df477
    Image:          docker.io/istio/health:example
    Image ID:       docker.io/istio/health@sha256:d8a2ff91d87f800b4661bec5aaadf73d33de296d618081fa36a0d1cbfb45d3d5
    Port:           8001/TCP
    Host Port:      0/TCP
		...
    Ready:          True
    Restart Count:  0
    Liveness:       http-get http://:15020/app-health/liveness-http/livez delay=5s timeout=1s period=5s #success=1 #failure=3
    ...
  istio-proxy:
    Container ID:  containerd://d4b0955372bdb7b3e1490eb3f290c6c6f5a9f2691eabea4cebafaafa8be85fc9
    Image:         docker.io/istio/proxyv2:1.17.8
    Image ID:      docker.io/istio/proxyv2@sha256:d33fd90e25c59f4f7378d1b9dd0eebbb756e03520ab09cf303a43b51b5cb01b8
    Port:          15090/TCP
    ...
    Readiness:  http-get http://:15021/healthz/ready delay=1s timeout=3s period=2s #success=1 #failure=30
    Environment:
      ...                          
      ISTIO_META_POD_PORTS:          [
                                         {&quot;containerPort&quot;:8001,&quot;protocol&quot;:&quot;TCP&quot;}
                                     ]
      ISTIO_META_APP_CONTAINERS:     liveness-http
      ISTIO_META_CLUSTER_ID:         Kubernetes
      ISTIO_META_NODE_NAME:           (v1:spec.nodeName)
      ISTIO_META_INTERCEPTION_MODE:  REDIRECT
      ISTIO_META_WORKLOAD_NAME:      liveness-http
      ISTIO_META_OWNER:              kubernetes://apis/apps/v1/namespaces/istioinaction/deployments/liveness-http
      ISTIO_META_MESH_ID:            cluster.local
      TRUST_DOMAIN:                  cluster.local
      ISTIO_KUBE_APP_PROBERS:        {&quot;/app-health/liveness-http/livez&quot;:{&quot;httpGet&quot;:{&quot;path&quot;:&quot;/foo&quot;,&quot;port&quot;:8001,&quot;scheme&quot;:&quot;HTTP&quot;},&quot;timeoutSeconds&quot;:1}}


kubectl get pod -n istioinaction -l app=liveness-http -o json | jq '.items[0].spec.containers[0].livenessProbe.httpGet'
{
  &quot;path&quot;: &quot;/app-health/liveness-http/livez&quot;,
  &quot;port&quot;: 15020,
  &quot;scheme&quot;: &quot;HTTP&quot;
}

# 헬스체크 확인
kubectl exec -n istioinaction deploy/liveness-http -c istio-proxy -- curl -s localhost:15020/app-health/liveness-http/livez -v
*   Trying 127.0.0.1:15020...
* Connected to localhost (127.0.0.1) port 15020 (#0)
&amp;gt; GET /app-health/liveness-http/livez HTTP/1.1
&amp;gt; Host: localhost:15020
&amp;gt; User-Agent: curl/7.81.0
&amp;gt; Accept: */*
&amp;gt; 
* Mark bundle as not supporting multiuse
&amp;lt; HTTP/1.1 200 OK
&amp;lt; Date: Sat, 17 May 2025 09:28:00 GMT
&amp;lt; Content-Length: 0
&amp;lt; 
* Connection #0 to host localhost left intact

# 실습 확인 후 삭제
kubectl delete deploy liveness-http -n istioinaction
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380dda874d9b6261bb35f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380beab7ec7e669771a46&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/debug/ndsz&lt;/code&gt; : istiod가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;NDS&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;N&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;ame &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;D&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;iscovery &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;S&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;ervice&lt;/span&gt; API로 DNS 프록시에 설정한 호스트네임들을 나열한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Lists the hostnames for which DNS proxy is configured by istiod using the Name Discovery Service (NDS) API.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380cc8c19cae81e5993fa&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380249c69e948f3f4f671&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/debug/pprof/*&lt;/code&gt; : 성능 문제, 메모리 누수 등을 디버깅하는 데 도움이 되는 Go 언어 프로파일링 엔드포인트. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://go.dev/doc/diagnostics#profiling&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e380f3fb0f8f172477&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본 경로 localhost:15020/debug/pprof 에 쿼리해 디버그 엔드포인트의 전체 목록을 확인할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238051b180ceadbeb991e8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;출력은 HTML이며 브라우저에서 보는 것이 가장 좋다 (로컬호스트 포트 포워딩).&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d0b4c2fbb609acd980&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로파일링 엔드포인트는 이스티오 개발자와 관련 있으며 이스티오 사용자는 신경 쓸 필요가 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238034aa29fc12c9c86538&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380518686ff856ea8ef1a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;접근 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a29d1fccb94545e71e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vala&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl exec -n istioinaction deploy/webapp -c istio-proxy -- curl -s localhost:15020/healthz/ready -v

# webapp 워크로드의 병합된 통계 확인 : istio_agent로 시작하는 메트릭(pilot 에이전트에서 온 것) + envoy로 시작하는 메트릭(프록시에서 온 것)
kubectl exec -n istioinaction deploy/webapp -c istio-proxy -- curl -s localhost:15020/stats/prometheus
## 응답에서는 istio_agent로 시작하는 메트릭(pilot 에이전트에서 온 것)과 envoy로 시작하는 메트릭(프록시에서 온 것)을 볼 수 있는데,
## 이는 이 둘이 병합됐음을 보여준다.

#
kubectl exec -n istioinaction deploy/webapp -c istio-proxy -- curl -s localhost:15020/quitquitquit
Method Not Allowed

#
kubectl exec -n istioinaction deploy/webapp -c istio-proxy -- curl -s localhost:15020/debug/ndsz

#
kubectl port-forward deploy/webapp -n istioinaction 15020:15020
open http://localhost:15020/debug/pprof # 혹은 웹 브라우저에서 열기&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238073b675cb8cc173ab1f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/eb310c3d-d80a-430e-ae33-89f070e085a3/image.png?table=block&amp;amp;id=1f6b8b2c-1c23-8073-b675-cb8cc173ab1f&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=bhSQYz2t_ok8HSJ0drWXnUvwuTwJN34H1w7KFwMZWKE&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;358.67744305657607&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238085abc4d45ba1894e89&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;D.1.2 이스티오 에이전트를 통해 이스티오 파일럿 디버그 엔드포인트들 쿼리하기&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380619848c89222956032&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;에이전트는 기본적으로 15004 포트에서 몇 가지 istiod 디버그 엔드포인트들을 노출한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380799123f7830b7574d9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 엔드포인트들에 한 요청은&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; xDS 이벤트 형태로 안전하게 istiod&lt;/span&gt;로 전달되는데, 이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;에이전트에서 컨트롤 플레인으로의 연결 상태&lt;/span&gt;를 확인 할 수 있는 좋은 방법이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23805c8f31dad53f3c0209&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 노출된 엔드포인트들 중 하나로 워크로드의 동기화 상태를 쿼리할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380449857e92054801673&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 보려면, 프록시 중 하나의 셸 커넥션을 가져와서 파일럿 에이전트의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;15004&lt;/span&gt; 포트에 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/debug/sync&lt;/code&gt; 엔드포인트로 요청해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23806d8c4cd693b4c52f61&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;perl&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl exec -n istioinaction deploy/webapp -c istio-proxy -- curl -s localhost:15004/debug/syncz -v
kubectl exec -n istioinaction deploy/webapp -c istio-proxy -- curl -s localhost:15004/debug/syncz | jq
...
      &quot;@type&quot;: &quot;type.googleapis.com/envoy.service.status.v3.ClientConfig&quot;,
      &quot;node&quot;: {
        &quot;id&quot;: &quot;catalog-6cf4b97d-55844.istioinaction&quot;, # 워크로드 ID
        &quot;metadata&quot;: {
          &quot;CLUSTER_ID&quot;: &quot;Kubernetes&quot;
        }
      },
      &quot;genericXdsConfigs&quot;: [
        {
          &quot;typeUrl&quot;: &quot;type.googleapis.com/envoy.config.listener.v3.Listener&quot;,
          &quot;configStatus&quot;: &quot;SYNCED&quot; # xDS API는 최신 상태로 동기화됬다
        },
        {
          &quot;typeUrl&quot;: &quot;type.googleapis.com/envoy.config.route.v3.RouteConfiguration&quot;,
          &quot;configStatus&quot;: &quot;SYNCED&quot; # xDS API는 최신 상태로 동기화됬다
        },
        {
          &quot;typeUrl&quot;: &quot;type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment&quot;,
          &quot;configStatus&quot;: &quot;SYNCED&quot; # xDS API는 최신 상태로 동기화됬다
        },
        {
          &quot;typeUrl&quot;: &quot;type.googleapis.com/envoy.config.cluster.v3.Cluster&quot;,
          &quot;configStatus&quot;: &quot;SYNCED&quot; # xDS API는 최신 상태로 동기화됬다
        },
...

# 하위 명령 출력 내용과 동일
docker exec -it myk8s-control-plane istioctl x internal-debug -h
docker exec -it myk8s-control-plane istioctl x internal-debug syncz
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e9ad0bfa4ef89d299d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;노출된 정보는 이스티오 파일럿 디버그 엔드포인트들이 노출하는 정보의 부분집합이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e2b2dbf1ac0d4aff9a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 istioctl에 새로 추가된 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;istioctl x internal-debug&lt;/code&gt; 명령어가 동일한 엔드포인트를 노출한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23806c8f0bcb30025323b6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23805e95b3c83759658f7a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이들이 노출하는 이런 포트와 서비스에 대한 지식은 트러블슈팅을 더 쉽게 만든다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380c1851ef74564c51e37&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서 최신 엔보이 설정을 쿼리할 수도 있고, DNS 해석을 직접 시험해볼 수도 있으며, 구성 요소의 동작을 알아보고자 메트릭을 퀴리할 수도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b1afc4cb4b166cece6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음으로 이스티오 파일럿이 노출하는 것들을 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e29aacdc307741b4ca&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238094b61dd4fec62c7b06&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.D.2 이스티오 파일럿(ControlPlane 영역에서 확인)이 노출하는 정보&lt;/span&gt; Information exposed by the Istio Pilot&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806692bbd11c11a2fb56&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;파일럿은 서비스 메시를 검사하고 디버깅하기 위한 정보들도 노출한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b9b036dd36993562b3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 정보는 서비스 메시 운영자는 물론이고 외부 서비스들에도 유용하다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800d8b5eda220cc56170&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 파일럿이 열어둔 포트를 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803d9a2ede4be1aab712&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl -n istio-system exec -it deploy/istiod -- netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:9876          0.0.0.0:*               LISTEN     
tcp6       0      0 :::15017                :::*                    LISTEN     
tcp6       0      0 :::15014                :::*                    LISTEN     
tcp6       0      0 :::15012                :::*                    LISTEN     
tcp6       0      0 :::15010                :::*                    LISTEN     
tcp6       0      0 :::8080                 :::*                    LISTEN 

# pilot-discovery 프로세스 확인
kubectl -n istio-system exec -it deploy/istiod -- ss -tnlp
State          Recv-Q         Send-Q                 Local Address:Port                  Peer Address:Port         Process                                          
LISTEN         0              4096                       127.0.0.1:9876                       0.0.0.0:*             users:((&quot;pilot-discovery&quot;,pid=1,fd=8))          
LISTEN         0              4096                               *:15017                            *:*             users:((&quot;pilot-discovery&quot;,pid=1,fd=12))         
LISTEN         0              4096                               *:15014                            *:*             users:((&quot;pilot-discovery&quot;,pid=1,fd=9))          
LISTEN         0              4096                               *:15012                            *:*             users:((&quot;pilot-discovery&quot;,pid=1,fd=10))         
LISTEN         0              4096                               *:15010                            *:*             users:((&quot;pilot-discovery&quot;,pid=1,fd=11))         
LISTEN         0              4096                               *:8080                             *:*             users:((&quot;pilot-discovery&quot;,pid=1,fd=3)) 

#
kubectl describe pod -n istio-system -l app=istiod
...
Containers:
  discovery:
    Container ID:  containerd://f13d7ad8a32cc0cecf47392ef426ea4687ce12d1abf64b5a6d2a60c2f8934e04
    Image:         docker.io/istio/pilot:1.17.8
    Image ID:      docker.io/istio/pilot@sha256:cb9e7b1b1c7b8dcea37d5173b87c40f38a5ae7b44799adfdcf8574c57a52ad2c
    Ports:         8080/TCP, 15010/TCP, 15017/TCP
    Host Ports:    0/TCP, 0/TCP, 0/TCP
    Args:
      discovery
      --monitoringAddr=:15014
      --log_output_level=default:info
      --domain
      cluster.local
      --keepaliveMaxServerConnectionAge
      30m
    ...
    Readiness:  http-get http://:8080/ready delay=1s timeout=5s period=3s #success=1 #failure=3
    Environment:
      REVISION:                                     default
      JWT_POLICY:                                   third-party-jwt
      PILOT_CERT_PROVIDER:                          istiod
      POD_NAME:                                     istiod-8d74787f-ltkhs (v1:metadata.name)
      POD_NAMESPACE:                                istio-system (v1:metadata.namespace)
      SERVICE_ACCOUNT:                               (v1:spec.serviceAccountName)
      KUBECONFIG:                                   /var/run/secrets/remote/config
      PILOT_TRACE_SAMPLING:                         100
      PILOT_ENABLE_PROTOCOL_SNIFFING_FOR_OUTBOUND:  true
      PILOT_ENABLE_PROTOCOL_SNIFFING_FOR_INBOUND:   true
      ISTIOD_ADDR:                                  istiod.istio-system.svc:15012
      PILOT_ENABLE_ANALYSIS:                        false
      CLUSTER_ID:                                   Kubernetes
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b7a34fdf0aa526a6e5&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/50fcc977-dd1e-48e0-877c-cf82ef215241/CleanShot_2025-05-10_at_17.35.14.png?table=block&amp;amp;id=1f6b8b2c-1c23-80b7-a34f-df0aa526a6e5&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=yEcgEDKaM3J5j2pK3IxjtkV7BhcdGyqXTtSRpgYqTw0&quot; alt=&quot;노출된 이스티오 파일럿 포트와 그 기능&quot; width=&quot;768&quot; height=&quot;452.953560371517&quot; /&gt;노출된 이스티오 파일럿 포트와 그 기능&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238060a523f59a64bb19ce&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스용 포트
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803a9753d83753547c6c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;쿠버네티스 API 서버는 새로 만들어진 파드에 사이드카를 주입하고, Gateway나 VirtualServie 같은 이스티오 리소스를 검증하기 위해 호출한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b482d0cf9486649117&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;15010&lt;/span&gt; : xDS API 및 인증서 발급을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;평문&lt;/span&gt;으로 노출한다. 트래픽을 스니핑할 수 있으므로 이 포트는 사용하지 않는 것이 좋다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23805894ded9fee0925dca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;15012&lt;/span&gt; : 15010 포트와 노출하는 정보는 같지만 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;보안&lt;/span&gt;을 적용한다. 이 포트는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TLS&lt;/span&gt;를 사용해 ID를 발급하여, 후속 요청은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;상호 인증&lt;/span&gt;된다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380bbb0dbd9d4963a816f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;15014&lt;/span&gt; : 11장에서 다룬 것과 같은 컨트롤 플레인 메트릭을 노출한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ecaa75d9347776bb9b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;15017&lt;/span&gt; : 쿠버네티스 API 서버가 호출하는 웹훅 서버를 노출한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f99ef7d19c89e67aaf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;디버깅 및 검사 포트&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d09d66f09b4e7d5339&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8080&lt;/span&gt; : 이스티오 파일럿 디버그 엔드포인트를 노출한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f3b79ece4405454f0c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9876&lt;/span&gt; : istiod 프로세스에 대한 검사 정보를 노출한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d19becc2f138638544&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238035a39ac467abfd531e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;D.2.1 이스티오 파일럿 디버그 엔드포인트&lt;/u&gt;&lt;/span&gt; The Istio Pilot debug endpoints&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238068839ad60ca0fccd4f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 파일럿 디버그 엔드포인트는 파일럿이 알고 있는 전체 서비스 메시의 설정과 상태를 노출한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809f910ec490317bb90e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔드포인트는 다음과 같은 질문들에 답한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ea8569d1a12b427813&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프록시는 동기화됐는가?&lt;/span&gt; Are the proxies synchronized?&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380c0943fd1b1994e1263&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프록시에 대한 마지막 푸시는 언제 수행됐는가?&lt;/span&gt; When was the last push to a proxy performed?&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804bb162eaaa4721150f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;xDS API의 상태는 어떤가?&lt;/span&gt; What&amp;rsquo;s the state of the xDS APIs?&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1f6b8b2c1c238041b827ccfffa555d87&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;디버그 엔드포인트로 접근해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c39447fffc554e9953&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vala&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl -n istio-system port-forward deploy/istiod 8080
open http://localhost:8080/debug

# 파일럿이 알고 있는 서비스 메시 상태
## 클러스터, 루트, 리스너 설정
curl -s http://localhost:8080/debug/adsz | jq

## 이 파일럿이 관리하는 모든 프록시에 대한 푸시를 트리거한다.
curl -s http://localhost:8080/debug/adsz\?push=true
Pushed to 4 servers

## /debug/edsz?proxyID=&amp;lt;pod&amp;gt;.&amp;lt;namespace&amp;gt; : 프록시가 알고 있는 엔드포인트들
curl -s http://localhost:8080/debug/edsz\?proxyID=webapp-7685bcb84-nhv2p.istioinaction | jq
[
  {
    &quot;clusterName&quot;: &quot;outbound|80||webapp.istioinaction.svc.cluster.local&quot;,
    &quot;endpoints&quot;: [
      {
        &quot;locality&quot;: {},
        &quot;lbEndpoints&quot;: [
          {
            &quot;endpoint&quot;: {
              &quot;address&quot;: {
                &quot;socketAddress&quot;: {
                  &quot;address&quot;: &quot;10.10.0.18&quot;,
                  &quot;portValue&quot;: 8080
                }
              }
            },
            &quot;healthStatus&quot;: &quot;HEALTHY&quot;,
            &quot;metadata&quot;: {
              &quot;filterMetadata&quot;: {
                &quot;envoy.transport_socket_match&quot;: {
                  &quot;tlsMode&quot;: &quot;istio&quot;
                },
                &quot;istio&quot;: {
                  &quot;workload&quot;: &quot;webapp;istioinaction;webapp;latest;Kubernetes&quot;
                }
              }
            },
            &quot;loadBalancingWeight&quot;: 1
          }
        ],
        &quot;loadBalancingWeight&quot;: 1
      }
    ]
  },
...

## /debug/authorizationz : 네임스페이스에 적용되는 인가 정책 목록
curl -s http://localhost:8080/debug/authorizationz | jq
{
  &quot;authorization_policies&quot;: {
    &quot;namespace_to_policies&quot;: {},
    &quot;root_namespace&quot;: &quot;istio-system&quot;
  }
}

# 파일럿이 알고 있는 데이터 플레인 설정을 나타내는 엔드포인트
## 이 파일럿 인스턴스에 연결된 모든 엔보이의 버전 상태 : 현재 비활성화되어 있음
curl -s http://localhost:8080/debug/config_distribution
Pilot Version tracking is disabled. It may be enabled by setting the PILOT_ENABLE_CONFIG_DISTRIBUTION_TRACKING environment variable to true

## 이스티오 파일럿의 현재 알려진 상태에 따라 엔보이 설정을 생성한다.
curl -s http://localhost:8080/debug/config_dump\?proxyID=webapp-7685bcb84-nhv2p.istioinaction | jq

## 이 파일럿이 관리하는 프록시들을 표시한다.
curl -s http://localhost:8080/debug/syncz | jq
...
  {
    &quot;cluster_id&quot;: &quot;Kubernetes&quot;,
    &quot;proxy&quot;: &quot;webapp-7685bcb84-lwsvj.istioinaction&quot;,
    &quot;istio_version&quot;: &quot;1.17.8&quot;,
    &quot;cluster_sent&quot;: &quot;ff5e6b2c-e857-4e12-b17e-46ad968567f4&quot;,
    &quot;cluster_acked&quot;: &quot;ff5e6b2c-e857-4e12-b17e-46ad968567f4&quot;,
    &quot;listener_sent&quot;: &quot;7280c908-010d-4788-807f-7138e74fe72e&quot;,
    &quot;listener_acked&quot;: &quot;7280c908-010d-4788-807f-7138e74fe72e&quot;,
    &quot;route_sent&quot;: &quot;2a1916c3-9c05-4ce5-8cfa-d777105b9205&quot;,
    &quot;route_acked&quot;: &quot;2a1916c3-9c05-4ce5-8cfa-d777105b9205&quot;,
    &quot;endpoint_sent&quot;: &quot;dffacd32-2674-4e39-8e76-17016ff32514&quot;,
    &quot;endpoint_acked&quot;: &quot;dffacd32-2674-4e39-8e76-17016ff32514&quot;
  },
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380fa97c1f879016bdb11&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/ba1369d9-df43-469e-8f49-c0765e1b6ed9/CleanShot_2025-05-10_at_18.02.53.png?table=block&amp;amp;id=1f6b8b2c-1c23-80fa-97c1-f879016bdb11&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=HjuLsena0N9KT-9FPjlXBMPd-4SOF9IiTMKZCqVXSKQ&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;368.9673518742443&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e19983f964e87ce6b5&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 991.016px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1f6b8b2c1c2380f3b173f666302536d5&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;디버그 엔드포인가 노출될 경우 오용될 수 있는 민감 정보가 포함돼 있다. 운영 환경에서는 이스티오를 설치할 때 환경 변수 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ENABLE_DEBUG_ON_HTTP&lt;/code&gt; 를 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;false&lt;/code&gt; 로 설정해 디버그 엔드포인트를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;비활성화를 권장&lt;/span&gt;한다. 이렇게 하면 해당 엔드포인트에 의존하는 도구가 제 역할을 할 수 없지만, 향후 릴리스에서는 이러한 엔드포인트가 xDS를 통해 안전하게 노출될 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Doing so will break the functionality of tools dependent on those endpoints; however, in future releases, these endpoints will be exposed securely over xDS.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803f9b7ac388aa769992&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802f864de5bf7e1ef37c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;파일럿이 알고&lt;/span&gt; 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 메시 상태&lt;/span&gt;를 나타내는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔드포인트&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a48970deabefb007b6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/debug/adsz&lt;/code&gt; : 클러스터, 루트, 리스너 설정&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238091b3e5f90048e42394&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/debug/adsz?push=true&lt;/code&gt; : 이 파일럿이 관리하는 모든 프록시에 대한 푸시를 트리거한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380349a4bdcdc46055d42&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/debug/edsz?&lt;/code&gt;&lt;i&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;proxyID&lt;/code&gt;&lt;/i&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;=&lt;/code&gt;&lt;i&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&amp;lt;pod&amp;gt;.&amp;lt;namespace&amp;gt;&lt;/code&gt;&lt;/i&gt; : 프록시가 알고 있는 엔드포인트들&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804bba69e035c90a3fa6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/debug/authorizationz&lt;/code&gt; : 네임스페이스에 적용되는 인가 정책 목록&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380de9ba7e5063e1acd5f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380eea0fdca10ac5a51ac&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;파일럿이 알고&lt;/span&gt; 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 플레인 설정&lt;/span&gt;을 나타내는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔드포인트&lt;/span&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804e8668c269e0c3b505&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 프록시로 보낸 최신 논스 nonce 와 응답받은 최신 논스도 보여준다. 이 둘이 동일하면 프록시의 설정이 최신인 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380c8808afdc514ed814e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/debug/config_distribution&lt;/code&gt; : 이 파일럿 인스턴스에 연결된 모든 엔보이의 버전 상태&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23807b90c5fd2594330787&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/debug/config_dump?proxyID=&amp;lt;pod&amp;gt;.&amp;lt;namespace&amp;gt;&lt;/code&gt; : 이스티오 파일럿의 현재 알려진 상태에 따라 엔보이 설정을 생성한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380359280f407f361e814&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/debug/syncz&lt;/code&gt; : 이 파일럿이 관리하는 프록시들을 표시한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1f6b8b2c1c238043a4a3dd5c7c5991cc&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;it shows the latest nonce sent to the proxy and the latest nonce acknowledged. When those are the same, the proxy has the latest configuration.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d18505d2b7105c09b4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e69657e57b6d5e1869&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 메시 운영자는 보통 키알리, istioctl 등 다른 도구를 통해 엔드포인트를 간접적으로 사용할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a8bdb8cf44a51ef740&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 istioctl proxy-status 명령어는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프록시가 동기화됐는지 확인&lt;/span&gt;하기 위해 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/debug/syncz&lt;/code&gt; 엔드포인트를 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23805497aac6e40c9e26d7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 이런 도구가 제공하는 정보로 충분하지 않을 때는 직접 디버그 엔드포인트를 사용해 더 깊이 파고들 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d38c5df935ed662609&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d995d7c2ad7e35fa6d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;D.2.2 ControlZ 인터페이스&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802bbe38d0eb7e2fb3f5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 파일럿에는 파일럿 프로세스의 현재 상태와 몇 가지 사소한 설정 가능성을 확인 할 수 있는 관리자 인터페이스가 함께 제공된다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380fba44cd2b0e428b74b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 인터페이스는 아래 표 D.1 에서 다룬 것 처럼 파일럿 인스턴스와 관련된 정보를 빠르게 조회할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div class=&quot;notion-table__wrapper&quot; style=&quot;box-sizing: border-box; overflow-x: auto;&quot;&gt;
&lt;table class=&quot;notion-table col-header&quot; style=&quot;margin: 8px 0px 18px; border-collapse: collapse;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;
&lt;tr style=&quot;box-sizing: border-box; background-color: #e6e6e5;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 261.633px; max-width: 261.633px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;페이지&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 701px; max-width: 701px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;설명&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 261.633px; max-width: 261.633px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;로깅 범위&lt;/span&gt; Logging Scopes &lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 701px; max-width: 701px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;이 프로세스에 대한 로깅은 범위별로 구성돼 있어 범위별로 로깅 단계를 별도로 설정할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 261.633px; max-width: 261.633px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메모리 사용량&lt;/span&gt; Memory Usage &lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 701px; max-width: 701px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;이 정보는 Go 런타임에서 수집되며 이 프로세스의 메모리 소비량을 나타낸다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 261.633px; max-width: 261.633px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;환경 변수&lt;/span&gt; Environment Variables &lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 701px; max-width: 701px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;이 프로세스에 정의된 환경 변수 집합이다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 261.633px; max-width: 261.633px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프로세스 정보&lt;/span&gt; Process Information &lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 701px; max-width: 701px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;이 프로세스에 대한 정보다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 261.633px; max-width: 261.633px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;명령줄 인수&lt;/span&gt; Command-Line Arguments&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 701px; max-width: 701px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;이 프로세스를 시작할 때 사용한 명령줄 인수 집합이다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 261.633px; max-width: 261.633px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;버전 정보&lt;/span&gt; Version Info &lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 701px; max-width: 701px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;바이너리(예: 이스티오 파일럿 1.7.3)와 Go 런타임(go 1.14.7)에 대한 정보다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 261.633px; max-width: 261.633px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭&lt;/span&gt; Metrics&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 701px; max-width: 701px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;파일럿에서 노출하는 메트릭을 가져오는 방법 중 하나다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 261.633px; max-width: 261.633px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;시그널&lt;/span&gt; Signals&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 701px; max-width: 701px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;실행 중인 프로세스에 SUGUSR1 시그널을 보낼수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803fa356d62d146d4c59&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380c6a3b8f0e62ca65b6e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;접속 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23805faeb3e56585b3639a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;gauss&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl -n istio-system port-forward deploy/istiod 9876
open http://localhost:9876
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803d91fce5211acf0cb0&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/8d7f6e15-504b-4c5f-95c7-d3df911edb5f/image.png?table=block&amp;amp;id=1f6b8b2c-1c23-803d-91fc-e5211acf0cb0&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=kC1PToc2H6xUm8asLzxydB7RVje-o7gSVxGSQwOTXl0&quot; alt=&quot;image&quot; width=&quot;576&quot; height=&quot;392.2412993039443&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23808f82eedb7209953ab8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 파일럿을 디버깅 해야 할 때 로깅 범위 변경 사용 가능.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380db8fa5d688de20315e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1f6b8b2c1c23804089bde4a2fc784e04&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;11.0. istio 튜닝하기&lt;/p&gt;
&lt;div id=&quot;block-1f6b8b2c1c238062969fe6f5331a8ffe&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;This chapter covers&lt;/code&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Performance-tuning the control plane&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800492a6c92ce1e70d0e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인 성능에 영향을 미치는 요소 이해하기 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Understanding the factors of control-plane performance&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e29760f642178a1622&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;성능 모니터링 방법 알아보기 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;How to monitor performance&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806693d7dc848bcf42ba&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;주요 성능 메트릭 알아보기 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;What are the key performance metrics&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380478aabfbc582668b1e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;성능 최적화 방법 이해하기 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Understanding how to optimize performance&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380018be1cd692d8fd0ad&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : 컨트롤 플레인 성능 최적화&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380ac98c3c916f92a2344&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d7a603deba02cbc2ce&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;[실습 환경 구성] &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;k8s(1.23.17) 배포&lt;/span&gt; : NodePort(&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;30000&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;30005&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTPS&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a280d7c5f6f3ef015a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
git clone https://github.com/AcornPublishing/istio-in-action
cd istio-in-action/book-source-code-master
pwd # 각자 자신의 pwd 경로
code .

# 아래 extramounts 생략 시, myk8s-control-plane 컨테이너 sh/bash 진입 후 직접 git clone 가능
kind create cluster --name myk8s --image kindest/node:v1.23.17 --config - &amp;lt;&amp;lt;EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000 # Sample Application (istio-ingrssgateway) HTTP
    hostPort: 30000
  - containerPort: 30001 # Prometheus
    hostPort: 30001
  - containerPort: 30002 # Grafana
    hostPort: 30002
  - containerPort: 30003 # Kiali
    hostPort: 30003
  - containerPort: 30004 # Tracing
    hostPort: 30004
  - containerPort: 30005 # Sample Application (istio-ingrssgateway) HTTPS
    hostPort: 30005
  - containerPort: 30006 # TCP Route
    hostPort: 30006
  - containerPort: 30007 # kube-ops-view
    hostPort: 30007
  extraMounts: # 해당 부분 생략 가능
  - hostPath: /Users/gasida/Downloads/istio-in-action/book-source-code-master # 각자 자신의 pwd 경로로 설정
    containerPath: /istiobook
networking:
  podSubnet: 10.10.0.0/16
  serviceSubnet: 10.200.1.0/22
EOF

# 설치 확인
docker ps

# 노드에 기본 툴 설치
docker exec -it myk8s-control-plane sh -c 'apt update &amp;amp;&amp;amp; apt install tree psmisc lsof wget bridge-utils net-tools dnsutils tcpdump ngrep iputils-ping git vim -y'

# (옵션) kube-ops-view
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30007 --set env.TZ=&quot;Asia/Seoul&quot; --namespace kube-system
kubectl get deploy,pod,svc,ep -n kube-system -l app.kubernetes.io/instance=kube-ops-view

## kube-ops-view 접속 URL 확인
open &quot;http://localhost:30007/#scale=1.5&quot;
open &quot;http://localhost:30007/#scale=1.3&quot;

# (옵션) metrics-server
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm install metrics-server metrics-server/metrics-server --set 'args[0]=--kubelet-insecure-tls' -n kube-system
kubectl get all -n kube-system -l app.kubernetes.io/instance=metrics-server
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23809b8a04d96c7134e630&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d7b204c5487bba1921&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;[실습 환경 구성] &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio 1.17.8 설치&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/setup/install/istioctl/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Install&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/setup/additional-setup/config-profiles/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;profile&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c387c6ec7f592b9c6b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# myk8s-control-plane 진입 후 설치 진행
docker exec -it myk8s-control-plane bash
-----------------------------------
# (옵션) 코드 파일들 마운트 확인
tree /istiobook/ -L 1
혹은
git clone ... /istiobook

# istioctl 설치
export ISTIOV=1.17.8
echo 'export ISTIOV=1.17.8' &amp;gt;&amp;gt; /root/.bashrc

curl -s -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIOV sh -
cp istio-$ISTIOV/bin/istioctl /usr/local/bin/istioctl
istioctl version --remote=false

# demo 프로파일 컨트롤 플레인 배포
istioctl install --set profile=demo --set values.global.proxy.privileged=true --set meshConfig.accessLogEncoding=JSON -y

# 보조 도구 설치
kubectl apply -f istio-$ISTIOV/samples/addons

# 빠져나오기
exit
-----------------------------------

# 설치 확인 : istiod, istio-ingressgateway, crd 등
kubectl get istiooperators -n istio-system -o yaml
kubectl get all,svc,ep,sa,cm,secret,pdb -n istio-system
kubectl get cm -n istio-system istio -o yaml
kubectl get crd | grep istio.io | sort

# 실습을 위한 네임스페이스 설정
kubectl create ns istioinaction
kubectl label namespace istioinaction istio-injection=enabled
kubectl get ns --show-labels

# istio-ingressgateway 서비스 : NodePort 변경 및 nodeport 지정 변경 , externalTrafficPolicy 설정 (ClientIP 수집)
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 8080, &quot;nodePort&quot;: 30000}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 443, &quot;targetPort&quot;: 8443, &quot;nodePort&quot;: 30005}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;:{&quot;externalTrafficPolicy&quot;: &quot;Local&quot;}}'
kubectl describe svc -n istio-system istio-ingressgateway

# NodePort 변경 및 nodeport 30001~30003으로 변경 : prometheus(30001), grafana(30002), kiali(30003), tracing(30004)
kubectl patch svc -n istio-system prometheus -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 9090, &quot;targetPort&quot;: 9090, &quot;nodePort&quot;: 30001}]}}'
kubectl patch svc -n istio-system grafana -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 3000, &quot;targetPort&quot;: 3000, &quot;nodePort&quot;: 30002}]}}'
kubectl patch svc -n istio-system kiali -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 20001, &quot;targetPort&quot;: 20001, &quot;nodePort&quot;: 30003}]}}'
kubectl patch svc -n istio-system tracing -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 16686, &quot;nodePort&quot;: 30004}]}}'

# Prometheus 접속 : envoy, istio 메트릭 확인
open http://127.0.0.1:30001

# Grafana 접속
open http://127.0.0.1:30002

# Kiali 접속 1 : NodePort
open http://127.0.0.1:30003

# (옵션) Kiali 접속 2 : Port forward
kubectl port-forward deployment/kiali -n istio-system 20001:20001 &amp;amp;
open http://127.0.0.1:20001

# tracing 접속 : 예거 트레이싱 대시보드
open http://127.0.0.1:30004
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380309a39df7781bd4512&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1f6b8b2c1c238081a570cfddbf7ac0fc&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;11.1. 컨트롤 플레인의 주요 목표&lt;/p&gt;
&lt;p id=&quot;block-1f6b8b2c1c2380b0b66de961bef8f37b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://netpple.github.io/docs/istio-in-action/Istio-ch11-performance&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://netpple.github.io/docs/istio-in-action/Istio-ch11-performance&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1f6b8b2c1c238066918fd905657e76bd&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : 유령 워크로드와 대응 방안&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b0b530fc5f4233ab82&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 장에서 컨트롤 플레인은 서비스 메시의 두뇌이며 서비스 메시 운영자를 위해 API를 노출한다고 했었다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380169ecee8fc69b58956&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 API를 사용하면, 메시의 동작을 조작하고 각 워크로드 인스턴스에 함께 배포된 서비스 프록시를 설정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380bda2c3e6cd83c5b78e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;간결함을 위해 앞서 생략했던 내용이 있는데, 서비스 메시 운영자(즉, 우리)가 이 API에 요청을 하는 것이 메시의 동작과 설정에 영향을 미치는 유일한 방법은 아니라는 점이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800eab23e93eb00e9c4c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;좀 더 일반적으로 말하면 컨트롤 플레인은 런타임 환경의 세부적인 내용들을 추상화하는데, 어떤 서비스가 존재하는지(서비스 디스커버리), 어떤 서비스가 정상인지와 오토스케일링 이벤트 등이 해당된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238016ba20c6e5f140e41b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380dfbbfffd3a371b538d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오의 컨트롤 플레인&lt;/span&gt;은 쿠버네티스의 이벤트를 수신하고, 원하는 새 상태를 반영하고자 설정을 업데이트한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380148603ce9e5671977f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 상태 조정 절차는 올바르게 동작하는 메시를 유지하기 위해 계속되며, 시기적절하게 일어나는 것이 중요하다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380669c65d305f154e140&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인이 상태 조정 절차를 적시에 하지 못할 때마다 예기치 못한 결과로 이어지는데, 워크로드는 이미 바뀐 상태로 설정돼 있기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380559606f9bcccb32c7e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380beb58fc187bf6df609&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;성능 저하&lt;/span&gt;될 때 발생하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;흔한 증상&lt;/span&gt;을 &amp;lsquo;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;유령 워크로드&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;phantom workload&lt;/span&gt;&amp;rsquo; 라고 하는데, 이미 사라진 엔드포인트로 트래픽을 라우팅하도록 서비스가 설정돼 있으므로 요청이 실패한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238048822add428eda9c8b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 11.1은 유령 워크로드의 개념을 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23800da356d89a059894b5&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/09b2c5cc-ca2b-4a67-aa83-31047104d488/CleanShot_2025-05-11_at_00.19.56.png?table=block&amp;amp;id=1f6b8b2c-1c23-800d-a356-d89a059894b5&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=RAZTHUHKmVjideF8-R6X1v0Uas_bRkp-jfvSHlq51bs&quot; alt=&quot;오래된? 설정으로 트래픽을 &amp;lsquo;유령 워크로드&amp;rsquo;로 라우팅&quot; width=&quot;705.9658813476562&quot; height=&quot;377.98173250625223&quot; /&gt;오래된? 설정으로 트래픽을 &amp;lsquo;유령 워크로드&amp;rsquo;로 라우팅&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ff91e5fc7be7396aa0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;비정상이 된 워크로드가 이벤트를 트리거한다.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238042a071e7dd13ce6613&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;업데이트가 지연되면 서비스가 낡은 설정을 지니게 된다.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380749dece20c455c3d83&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;오래된? 설정 때문에 서비스가 트래픽이 존재하지 않은 워크로드로 라우팅한다.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380acb167d8114636f231&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238076b09ceac00ea39977&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;데이터 플레인의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;궁극적 일관성&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;eventually consistent&lt;/span&gt; 성질 덕분에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;설정이 잠깐 낡은&lt;/span&gt; 것은 그리 문제가 되지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238003a6c0c7b1d0ff9d98&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다른 보호 기체&lt;/span&gt;를 사용할 수 있기 때문이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;as other protective mechanisms can be employed.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ec9869d7dcbf2478e5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 네트워크 문제로 요청이 실패하면 요청은 기본적으로 두 번 재시도되므로, 아마도 다른 정상 엔드포인트가 처리할 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23808cbef6fbaba17b4a9c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804995ade62f886fed9e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또 다른 교정 방법으로는 이상값 감지가 있는데, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔드포인트로 보낸 요청이 실패&lt;/span&gt;했을 때 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터에서 엔드포인트를 배제하&lt;/span&gt;는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380948f1dfdce03a1f1a8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 지연이 몇 초를 넘어가면 최종 사용자에게 부정적인 영향을 미칠 수 있으므로 반드시 피해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b0871dd79f5d0e330c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 장에서는 바로 이 내용을 주로 다룬다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238078bfd3d51d86193d42&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380068412c3d1894fd2ef&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;11.1.1 데이터 플레인 동기화 단계 이해하기&lt;/span&gt; Understanding the steps of data-plane synchronization : 디바운스와 스로틀링&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380308a2dc6643483b803&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;데이터 플레인을 원하는 상태로 동기화하는 과정은 여러 단계로 수행된다.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238071b8d6cb16f96f37c4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인은 쿠버네티스에서 이벤트를 수신한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802c9ed1c87f780eab42&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이벤트는 엔보이 설정으로 변환돼 데이터 플레인의 서비스 프록시로 푸시된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a3a160fbeb10755ad4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 과정을 이해하면 컨트롤 플레인 성능을 미세 조정하고 최적화할 때 이뤄지는 의사결정에 도움이 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23802991f4d8330492501b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238061bd13f2a7fe67d629&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 11.2는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;들어오는 변경 사항&lt;/span&gt;에 맞춰 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 플레인을 동기화&lt;/span&gt;하는 단계를 순서대로 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238029a936c3c4e77b8788&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/cf13fb8e-3a7c-478b-a3de-7bd649882fe0/CleanShot_2025-05-11_at_00.34.15.png?table=block&amp;amp;id=1f6b8b2c-1c23-8029-a936-c3c4e77b8788&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=Pi1hrkE23xAxkqkIRAkPma1roTlSjqWQrR_M0xTNYTg&quot; alt=&quot;최신 설정을 워크로드에 푸시하는 작업의 순서&quot; width=&quot;864&quot; height=&quot;489.64317841079463&quot; /&gt;최신 설정을 워크로드에 푸시하는 작업의 순서&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a6b09efd7aa2463c79&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;들어오는 이벤트가 동기화 과정을 시작한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;An incoming event triggers the synchronization process.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238079a2f5cb9a8311a059&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt; 의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DiscoveryServer&lt;/span&gt; 구성 요소가 이 이벤트들을 수신한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The DiscoveryServer component of istiod listens for these events.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238060a159ebb58fef8739&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;성능을 향상시키기 위해, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;푸시 대기열에 이벤트를 추&lt;/span&gt;가하는 작업을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;일정 시간 미루고&lt;/span&gt; 그 동안의&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; 후속 이벤트를 병합해 일괄 처리&lt;/u&gt;&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809e9f39ea9ad28fd8d0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 &amp;lsquo;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;디바운스&lt;/u&gt;&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;debounce&lt;/span&gt; 한다&amp;rsquo;고 말하는데, 디바운스는 시간을 잡아먹는 작업이 너무 자주 실행되지 않도록 해준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380399827d26016bdc748&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지연 시간이 만료되면, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DiscoveryServer&lt;/span&gt;가 병합된 이벤트를 푸시 대기열에 추가한다. 푸시 대기열은 처리 대기 중인 푸시 목록을 유지 관리한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1f6b8b2c1c23800ca65ff7cd92170dc7&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;After the delay period expires, the DiscoveryServer adds the merged events to the push queue, which maintains a list of pushes waiting to be processed.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380daa93fea7c4ee6ee11&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt; 서버는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 동시&lt;/span&gt;에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;처리&lt;/span&gt;되는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;푸시 요청 개수&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;제한&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;throttle&lt;/span&gt; 하는데, 이는 처리 중인 항목이 더 빨리 처리되도록 보장하고 CPU 시간이 작업 간 콘텍스트 스위칭에 낭비되는 것을 방지한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; server &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;throttles&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; (limits) the number of push requests that are processed &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;concurrently&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, which ensures that faster progress is made on the items being processed and prevents CPU time from being wasted on context switching between the tasks.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380bcb6d3e93c8e3fd70f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;처리된 항목은 엔보이 설정으로 변환돼 워크로드로 푸시된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The items that are processed are converted to Envoy configuration and pushed to the workloads.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807abb74e2bb0c2a1f1a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b39da0cfe5be9da6f1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서는 이스티오가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;디바운스&lt;/span&gt;(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;디바운싱&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;debouncing&lt;/span&gt;)와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스로틀링&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;throttling&lt;/span&gt; 이라는 두 가지 방법을 사용해 과부하되지 않도록 스스로를 보호하는 방법을 다룬다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800a8b85df7f8298b733&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;추후 살펴보겠지만 디바운스와 스로틀링은 성능을 향상시키기 위해 설정할 수 있는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380258c63c4004d902b32&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380049d69e13b071eb51f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;11.1.2 성능을 결정짓는 요소&lt;/span&gt; Factors that determine performance : 변경 속도, 할당된 리소스, 업데이트할 워크로드 개수, 설정 크기&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380069b72e3b5c0c67b44&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;동기화 프로세스를 잘 이해하면, 컨트롤 플레인의 성능에 영향을 미치는 요소를 자세히 설명할 수 있다. (그림 11.3 참조)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23806abedcc19ffd5ff7ef&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/cafd7241-e142-4dfc-be1a-24ec019702f4/CleanShot_2025-05-11_at_00.43.29.png?table=block&amp;amp;id=1f6b8b2c-1c23-806a-bedc-c19ffd5ff7ef&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=HjY-mrY98gFBkD5zM_71lk_j5BkOC1IosYucch7WbWk&quot; alt=&quot;컨트롤 플레인 성능에 영향을 주는 속성들&quot; width=&quot;960&quot; height=&quot;439.5180722891566&quot; /&gt;컨트롤 플레인 성능에 영향을 주는 속성들&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380abbaf5e40e0427f5ae&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;변경 비율&lt;/span&gt; The rate of changes&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380878bccf706033fb690&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;변경 빈도가 높을수록 데이터 플레인을 동기화 상태로 유지하는 데 더 많은 처리가 필요하다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;A higher rate of changes requires more processing to keep the data plane synchronized.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1f6b8b2c1c238088bf58cf9e74d4b001&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;할당된 리소스&lt;/span&gt; Allocated resources&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380cf80a2c35df07d630e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;수요가 istiod에 할당된 리소스를 넘어서면 작업을 대기열에 넣어야하므로 업데이트 배포가 느려진다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;If the demand exceeds the resources allocated to istiod, work has to be queued, which results in a slower distribution of updates.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238039a1b2ff83df1d0874&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;주로 CPU 할당에 따라서 istiod의 성능이 결정된다(cpu 집약적인 작업이 많음)&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380009673dc49f82bd117&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;업데이트할 워크로드 개수&lt;/span&gt; Number of workloads to update&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801cbb68dc98b8ccc91b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;더 많은 워크로드에 업데이트를 배포하려면 네트워크 대역폭과 처리 능력이 더 많이 필요하다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;More processing power and network bandwidth are required to distribute updates to more workloads.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1f6b8b2c1c23808bb083c33b5618ca9f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;설정 크기&lt;/span&gt; Configuration size&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238003936cdd171d5e69cb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;더 큰 엔보이 구성을 배포하려면 처리 능력과 네트워크 대역폭이 더 많이 필요하다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The distribution of larger Envoy configurations requires more processing power and more network bandwidth.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803aacfee4fbcfce9862&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23808bb378cebdf4a361f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 요소들에 맞게 성능을 최적화하는 방법을 다룰 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e9a53bda839fcf723e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러니 그 전에 프로메테우스가 istiod에서 수집한 메트릭을 시각화한 그라파나 대시보드(8장에서 준비함)를 사용해 병목 지점을 판단하는 방법을 배워보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238086958fd3cfcf2d1917&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1f6b8b2c1c2380aa92e2c64d2a70bcc4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;11.2. Control Plane(istiod) 모니터링하기&lt;/p&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380ada0d1d79f8d540b53&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : Monitoring the control plane&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380789f05c034542e0287&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istiod는 핵심 성능 지표의 지속 시간 및 빈도를 측정하는 메트릭을 노출하는데, 여기에는 리소스 사용률, 수신 또는 발신 트래픽으로 인한 부하, 오류 비율 등이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ddbf5fc3fb45d40602&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 지표들은 제어 평면의 성능이 어떤지, 어떤 것이 곧 문제를 일으킬지, 이미 올바르게 동작하지 않는 것을 어떻게 트러블슈팅해야 하는지를 밝히는 데 도움을 준다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801e8a27e96a3c6f0871&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;노출되는 메트릭들은 이스티오 공식 문서에 기술돼 있는데, 메트릭 개수는 방대하다 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/reference/commands/pilot-discovery/#metrics&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238042bcc5c22953bde521&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서는 주목해야 할 핵심 메트릭을 식별하고, 네 가지 황금 신호에 대략 맞도록 메트릭을 정리해볼 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807da706d684a59a3f40&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a7a3c9d1babea7b961&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;11.2.1 컨트롤 플레인의 네 가지 황금 신호&lt;/span&gt; The four golden signals of the control plane &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습~)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b88616d873b2a6a2a7&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;들어가며&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;실습 환경 초기화&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802ab200f1e37725f354&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://sre.google/sre-book/table-of-contents/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;구글 SRE 책&lt;/a&gt;에서 정의한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네 가지 황금 신호&lt;/span&gt;란 서비스가 어떻게 동작하는지에 대한 외부의 시각을 이해하기 위해 모니터링해야 하는 네 가지 주요 메트릭을 말한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f7a55acc61c5fb5b21&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;특정 서비스가 자신의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 수준 목표&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;SLO&lt;/span&gt; 에서 벗어난 경우, 황금 메트릭을 통해 원인을 분석하는 통찰력을 얻을 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a6b917ede981a8c939&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네 가지 신호는 지연 시간, 포화도, 오류, 트래픽이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e8ad46f2f18c4793ae&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인의 메트릭&lt;/span&gt;을 빠르게 살펴보려면 다음 명령어로 쿼리하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c289b0cd23dd511106&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;perl&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 실습 환경 준비
kubectl -n istioinaction apply -f services/catalog/kubernetes/catalog.yaml
kubectl -n istioinaction apply -f ch11/catalog-virtualservice.yaml
kubectl -n istioinaction apply -f ch11/catalog-gateway.yaml

# 확인
kubectl get deploy,gw,vs -n istioinaction

# 반복 설정 해두기
while true; do curl -s http://catalog.istioinaction.io:30000/items ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done


# 컨트롤 플레인 메트릭 확인
kubectl exec -it -n istio-system deploy/istiod -- curl localhost:15014/metrics
# HELP citadel_server_csr_count The number of CSRs received by Citadel server.
# TYPE citadel_server_csr_count counter
citadel_server_csr_count 3
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804c945afed029d906f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 장의 나머지 부분에서는 그라파나 대시보드로 이 메트릭들을 조사한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238099b75bf52a1a531dac&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d0ba41e9a25d773014&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;지연 시간&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;: 데이터 플레인을 업데이트하는 데 필요한 시간&lt;/u&gt;&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;LATENCY&lt;/span&gt;&lt;/span&gt;: THE TIME NEEDED TO UPDATE THE DATA PLANE&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238041a4a5e89791c5990b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지연 시간 신호를 사용하면 서비스가 어떻게 동작하는지를 서비스 외부의 최종 사용자 관점으로 알 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a88eb8f1ca19e5c0d1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지연 시간이 증가하면 서비스의 성능이 저하된 것이다. 그러나 성능 저하의 원인이 무엇인지는 알 수 없다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806b8c16db9cc50dc878&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;원인을 알려면 다른 신호를 조사해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23805ba3bce6608735850a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804db6b7c53d76c8ba44&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 컨트롤 플레인에서 지연 시간은 컨트롤 플레인이 데이터 플레인에 업데이트를 얼마나 빠릴 배포하는지로 측정한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f8aad1ca6b4635cfc4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지연 시간을 측정하는 주요 메트릭은 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;pilot_proxy_convergence_time&lt;/code&gt; 이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e8882bc4ae4a75b5db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;동기화 절차&lt;/span&gt; 중 대부분의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;시간을 소비&lt;/span&gt;하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;단계&lt;/span&gt;의 이해를 돕는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;보조 메트릭&lt;/span&gt;도 두 가지 있는데, 하나는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;pilot_proxy_queue_time&lt;/code&gt; 이고 다른 하나는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;pilot_xds_push_time&lt;/code&gt; 이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380dfa443f23449542076&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 11.4는 동기화 단계 중 이 메트릭이 다루는 부분을 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380dc9934d9e6957ee8ce&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/3fb8bbad-18fd-4a97-9806-f1f38fb6cfc9/CleanShot_2025-05-11_at_12.02.48.png?table=block&amp;amp;id=1f6b8b2c-1c23-80dc-9934-d9e6957ee8ce&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=gAjVvXvB8UZhkiy4lb0gXkP_WxSoxlrwcK4VgnH8h4I&quot; alt=&quot;전체 지연 시간 중 각 메트릭이 다루는 부분들&quot; width=&quot;768&quot; height=&quot;574.8074534161491&quot; /&gt;전체 지연 시간 중 각 메트릭이 다루는 부분들&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238023addaf4db5b0b2fc2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;pilot_proxy_convergence_time&lt;/code&gt; 은 프록시 푸시 요청이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;대기열에 안착한 순간&lt;/span&gt;부터 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드에 배포&lt;/span&gt;되기까지 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;전체 과정의 지속 시간을&lt;/span&gt; 측정한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;measures the entire process&amp;rsquo;s &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;duration&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;time&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; a &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;proxy&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;push&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;request&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; lands in the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;queue&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; until it is &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;distributed&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; to the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;workloads&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380c7881cd419be9f4d45&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;pilot_proxy_queue_time&lt;/code&gt; 은 워커가 처리할 때까지 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;푸시 요청이 대기열에서 기다린 시간&lt;/span&gt;을 측정한다. 푸시 대기열에서 상당한 시간이 걸리는 경우, istiod를 수직으로 확장해 동시 처리 능력을 높일 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;measures the time the push requests wait in the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;queue&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; until they are &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;processed&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; by a &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;worker&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;. If a considerable &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;amount&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; of &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;time&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; is &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;spent&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; in the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;push queue,&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; we might scale istiod vertically and increase the concurrent processing power.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380648750f9e2f9be4ec9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;pilot_xds_push_time&lt;/code&gt; 은&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 엔보이 설정&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드로 푸시&lt;/span&gt;하는 데 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필요한 시간&lt;/span&gt;을 측정한다. 시간이 늘어나면, 전송되는 데이터양 때문에 네트워크 대역폭이 과부하된 것이다. 설정 업데이트 크기와 워크로드별 변화 빈도를 줄임으로써 이 상황을 상당히 개선할 수 있는 방법을 뒷부분에서 살펴본다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;measures the time required to &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;push&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Envoy&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;configuration&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; to &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;workloads&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;. An increase shows that network bandwidth is overloaded by the amount of data being transferred. We see in later sections how sidecars can considerably improve this situation by reducing the size of configuration updates and frequency of changes per proxy.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d78c47fac82c62cfab&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380cfa81fcdd9e935d042&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;pilot_proxy_convergence_time&lt;/code&gt; 은 그라파나 대시보드에서 시각화하고 있는데, Istio Control Plane 대시보드의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Proxy Push Time&lt;/span&gt;이라는 Pilot Push 정보 부분에 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380cbb6ebf0f5485140ac&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/c5daa1db-f15d-4ccf-a576-3b1345fa86a6/CleanShot_2025-05-11_at_12.44.41.png?table=block&amp;amp;id=1f6b8b2c-1c23-80cb-b6eb-f0f5485140ac&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=XaUDGxgTei8_fbodkxrVslmVJkKBImPootQcjWc47To&quot; alt=&quot;image&quot; width=&quot;598.9772338867188&quot; height=&quot;306.9883318918575&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238018b2aeeb68f700e3f0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;위 그래프는 푸시의 99.9%는 워크로드에 배포하는 데 걸리는 시간이 100ms 미만임. 이상적이다!&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807dbcefd190cc4ff3c1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;lisp&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;histogram_quantile(0.5,   sum(rate(pilot_proxy_convergence_time_bucket[1m])) by (le))
histogram_quantile(0.9,   sum(rate(pilot_proxy_convergence_time_bucket[1m])) by (le))
histogram_quantile(0.99,  sum(rate(pilot_proxy_convergence_time_bucket[1m])) by (le))
histogram_quantile(0.999, sum(rate(pilot_proxy_convergence_time_bucket[1m])) by (le))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380558ea2c7d4f001d781&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(참고) 프로메테우스 쿼리 : &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;le (누적 카운트) &amp;ldquo;less than or equal&amp;rdquo;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380f48678d3296c7c5495&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;pilot_proxy_convergence_time_bucket
# le=&quot;0.1&quot;: 0.1초 이하로 동기화 완료된 프록시가 10개
# le=&quot;1&quot;: 1초 이하로 완료된 프록시가 누적 20개
# le=&quot;+Inf&quot;: 모든 프록시 포함 &amp;rarr; 누적 41개
...

pilot_proxy_convergence_time_bucket[1m]
rate(pilot_proxy_convergence_time_bucket[1m])
sum(rate(pilot_proxy_convergence_time_bucket[1m]))
sum(rate(pilot_proxy_convergence_time_bucket[1m])) by (le)

histogram_quantile(0.5, sum(rate(pilot_proxy_convergence_time_bucket[1m])) by (le))
histogram_quantile(0.9, sum(rate(pilot_proxy_convergence_time_bucket[1m])) by (le))
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a394fce228f16d3845&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/2098f432-7833-4d1c-a070-8727752b1251/CleanShot_2025-05-11_at_12.54.00.png?table=block&amp;amp;id=1f6b8b2c-1c23-80a3-94fc-e228f16d3845&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=cqDtu7lGRFz_c8q91b6DykY9500JvKSXsAGKO59jApg&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;673.8247933884297&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380439c8fe0fafbcb437e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238006bc39ef8004365478&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그라파나 대시보드에 2개의 패널(메트릭) 추가 하자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23809eb9b4d70087baadd2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/3fb8bbad-18fd-4a97-9806-f1f38fb6cfc9/CleanShot_2025-05-11_at_12.02.48.png?table=block&amp;amp;id=1f6b8b2c-1c23-80dc-9934-d9e6957ee8ce&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=gAjVvXvB8UZhkiy4lb0gXkP_WxSoxlrwcK4VgnH8h4I&quot; alt=&quot;전체 지연 시간 중 각 메트릭이 다루는 부분들&quot; width=&quot;643.9772338867188&quot; height=&quot;481.9829607661467&quot; /&gt;전체 지연 시간 중 각 메트릭이 다루는 부분들&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b7b196c1c284c6e38e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;대시보드 편집 설정&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23809892cfc50a6cdaa618&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/e6a99e5c-621a-484a-987c-f870ed1181f9/CleanShot_2025-05-11_at_12.59.10.png?table=block&amp;amp;id=1f6b8b2c-1c23-8098-92cf-c50a6cdaa618&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=IvGFpsGwh_1op1SFeWJc5tx1uQrIFvqBzha-LkKeiIQ&quot; alt=&quot;image&quot; width=&quot;434.9999694824219&quot; height=&quot;255.9999820402299&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a4ade3d902480f1414&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기존 Proxy Push Time 패널 복제 하기&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380f39b75cd9e1e181794&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/31ed5daf-c65d-4f83-ab37-721662beb720/CleanShot_2025-05-11_at_13.00.02.png?table=block&amp;amp;id=1f6b8b2c-1c23-80f3-9b75-cd9e1e181794&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=X8mNYbWCpaIDraqqnK6BMG71jZ6ZT39OSYmvJujzpp0&quot; alt=&quot;image&quot; width=&quot;576&quot; height=&quot;314.4440734557596&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380dcbe0add514daabecd&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238089a9a6c8d42535d605&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Proxy Queue Time &lt;/span&gt;: PromQL - &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;pilot_proxy_queue_time&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23802e96caec3a5cad40e2&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;lisp&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;histogram_quantile(0.5, sum(rate(pilot_proxy_queue_time_bucket[1m])) by (le))
histogram_quantile(0.9, sum(rate(pilot_proxy_queue_time_bucket[1m])) by (le))
histogram_quantile(0.99, sum(rate(pilot_proxy_queue_time_bucket[1m])) by (le))
histogram_quantile(0.999, sum(rate(pilot_proxy_queue_time_bucket[1m])) by (le))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23809da9a5e957c91c8d28&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238061ac8bf6a4524d01cd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;XDS Push Time &lt;/span&gt;: PromQL - &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;pilot_xds_push_time_bucket&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807ea6f2eab26dca1cef&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;lisp&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;histogram_quantile(0.5, sum(rate(pilot_xds_push_time_bucket[1m])) by (le))
histogram_quantile(0.9, sum(rate(pilot_xds_push_time_bucket[1m])) by (le))
histogram_quantile(0.99, sum(rate(pilot_xds_push_time_bucket[1m])) by (le))
histogram_quantile(0.999, sum(rate(pilot_xds_push_time_bucket[1m])) by (le))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a48e4dd7cc681c9579&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380488836c34005bb6e7a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;패널 위치 취향에 따라 배치&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380cabbadec11c1586640&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/7b731c8c-4c23-4145-885f-f566dac256eb/CleanShot_2025-05-11_at_13.07.44.png?table=block&amp;amp;id=1f6b8b2c-1c23-80ca-bbad-ec11c1586640&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=bEQMt2vZpFZcEJRJcGXUneQbMyl602k9uMxKgYGCca4&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;329.43884892086334&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380ee8c6bc98fb0100cc5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b1aa45ecdda6206131&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메시에 워크로드를 추가하면 이런 다양한 메트릭에서 지연 시간이 서서히 증가한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b6988fe9e7cc0abbf8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 당연한 일이므로 약간 증가하는 것은 걱정하지 않아도 된다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380afb56bd37b4f2197d2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다만, 허용할 수 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;임계값&lt;/span&gt;은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;정의&lt;/span&gt;하고 지연 시간이 허용할 수 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;한계&lt;/span&gt;를 넘어가면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;얼럿을 트리거&lt;/span&gt;해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380de9024f74888ffe20f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 기준으로 임계값을 고려하는 것을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;권장&lt;/span&gt;한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e4b7c2eb235e3a5ff1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Warning 심각도&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;severity&lt;/span&gt; : 10초 이상 동안 지연 시간이 1초를 초과하는 경우&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238054ae30cd2fdea4a6df&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Critical 심각&lt;/span&gt;도 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;severity&lt;/span&gt; : 10초 이상 동안 지연 시간이 2초를 초과하는 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238052afc3ef1159a7b38e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238042920de19c2f695d97&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;첫 번째 얼럿을 받았을 때는 겁 먹을 필요 없다. 단지 서비스 지연 시간이 증가했고 성능 최적화가 필요하다는 조치 요청일 뿐이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380eeabc2e8f5a5db70ef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 확인하지 않고 방치하면 성능이 더 저하돼 최종 사용자에게 영향을 미칠 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23802a8ebfee58940bd832&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802b8af3e2edaa0fc343&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지연 시간이 늘어났다는 것은 컨트롤 플레인 성능이 저하됐음을 알리는 가장 좋은 지표이지만, 성능 저하 원인에 대한 정보를 더 주지는 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806a8257faf3fd50c9b5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;저하 원인을 알아보려면 다른 메트릭을 더 깊이 파고들어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380dfbfe7f3d7545a82aa&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23801796f3e8d5ac5396bf&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;포화도&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;: 컨트롤 플레인이 얼마나(CPU, MEM 리소스) 가득 차 있는가?&lt;/u&gt;&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SATURATION&lt;/span&gt;&lt;/span&gt;: HOW FULL IS THE CONTROL PLANE?&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ee907ffc04ac312c45&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;포하도 메트릭&lt;/span&gt;은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;리소스 사용량&lt;/span&gt;을 보여준다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The saturation metrics show the capacity at which resources are being utilized.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d6a835d0c9b4fabbea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사용률이 90% 이상이면 서비스는 포화된 것이거나 곧 포화된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;If utilization is over 90%, the service is saturated or about to become so.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f3ad06e6181709a24c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod가 포화&lt;/span&gt;되면 배포 업데이트가 느려진다. 푸시 요청이 대기열에서 더 오래 처리를 기다리기 때문이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;When istiod is saturated, the distribution updates slow down as push requests are queued for longer periods, waiting to be processed.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380dc9a40e9170076bc97&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ea92d6da22ddc234d7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;포화는 보통 가장 제한적인 리소스 때문에 일어난다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CPU 집중적&lt;/span&gt;이므로, 보통은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CPU가 가장 먼저 포화&lt;/span&gt;된다.&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; CPU 사용률&lt;/span&gt;을 측정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803bace8e38bb9fd8e27&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/8e719e9d-3cb3-4095-bb3e-b9ceae6c015e/CleanShot_2025-05-11_at_13.26.20.png?table=block&amp;amp;id=1f6b8b2c-1c23-803b-ace8-e38bb9fd8e27&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=sAK6RLjUeD-Yvh0efPsIjrEjSSf5Y9ZlQ7HesVRMMaw&quot; alt=&quot;CPU 패널 확인&quot; width=&quot;912&quot; height=&quot;505.6262833675565&quot; /&gt;CPU 패널 확인&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ef9ecdd35eb2f40836&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;container_cpu_usage_seconds_total&lt;/code&gt; : 쿠버네티스 컨테이너가 보고하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(istiod 파드)&lt;/span&gt; CPU 사용률을 측정한다 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/docs/reference/instrumentation/metrics/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23801a87bfd1b07fd13b25&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# Cumulative cpu time consumed by the container in core-seconds
container_cpu_usage_seconds_total
container_cpu_usage_seconds_total{container=&quot;discovery&quot;}
container_cpu_usage_seconds_total{container=&quot;discovery&quot;, pod=~&quot;istiod-.*|istio-pilot-.*&quot;}
sum(irate(container_cpu_usage_seconds_total{container=&quot;discovery&quot;, pod=~&quot;istiod-.*|istio-pilot-.*&quot;}[1m]))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23806181c6c83eeab21cd7&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1024px; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; width: 1024px; object-fit: contain; border-radius: 0px; object-position: center center;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/30c9d1a6-a8c0-4f6f-b940-ae0a5106d0a5/CleanShot_2025-05-11_at_13.36.14.png?table=block&amp;amp;id=1f6b8b2c-1c23-8061-81c6-c83eeab21cd7&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=VFJiWTbwAlaAVV7sj_BBSC6odmGamad9ZV_7yCVaFqo&quot; alt=&quot;container_cpu_usage_seconds_total{container=&amp;quot;discovery&amp;quot;}&quot; width=&quot;952.9609375&quot; height=&quot;120.71861580783683&quot; /&gt;container_cpu_usage_seconds_total{container=&quot;discovery&quot;}&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c7b708fbd465b8db5d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809fa10fde0fa5d07835&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;process_cpu_seconds_total&lt;/code&gt; : istiod 계측이 보고하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(istiod 파드) &lt;/span&gt;CPU 사용률을 측정.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238070b1d4dcd822921bfc&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# Total user and system CPU time spent in seconds
process_cpu_seconds_total{app=&quot;istiod&quot;}
irate(process_cpu_seconds_total{app=&quot;istiod&quot;}[1m])&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380cc9543f2aa1dee803f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/f1a78223-bdf0-42ad-8b13-a111231222e2/CleanShot_2025-05-11_at_13.33.27.png?table=block&amp;amp;id=1f6b8b2c-1c23-80cc-9543-f2aa1dee803f&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=cxcwXSjIj3hA_pVmtvZeh4ApyBlgxCdW1eWKAeJfxhU&quot; alt=&quot;process_cpu_seconds_total{app=&amp;quot;istiod&amp;quot;}&quot; width=&quot;912&quot; height=&quot;107.52411575562701&quot; /&gt;process_cpu_seconds_total{app=&quot;istiod&quot;}&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23805b8d83fe751888d4af&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380068b1fc30080636c38&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;lsl&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl top pod -n istio-system -l app=istiod --containers=true
POD                     NAME        CPU(cores)   MEMORY(bytes)   
istiod-8d74787f-kmpz8   discovery   2m           63Mi           

kubectl top pod -n istioinaction --containers=true
POD                      NAME          CPU(cores)   MEMORY(bytes)   
catalog-6cf4b97d-zgvjc   catalog       3m           27Mi            
catalog-6cf4b97d-zgvjc   istio-proxy   7m           49Mi 

#
kubectl resource-capacity -n istioinaction -c -u -a
kubectl resource-capacity -n istioinaction -c -u   

NODE                  POD                      CONTAINER     CPU REQUESTS   CPU LIMITS    CPU UTIL   MEMORY REQUESTS   MEMORY LIMITS   MEMORY UTIL
                                                                                                                                       
myk8s-control-plane   *                        *             10m (0%)       2000m (20%)   9m (0%)    40Mi (0%)         1024Mi (8%)     77Mi (0%)
myk8s-control-plane   catalog-6cf4b97d-zgvjc   *             10m (0%)       2000m (20%)   9m (0%)    40Mi (0%)         1024Mi (8%)     77Mi (0%)
myk8s-control-plane   catalog-6cf4b97d-zgvjc   catalog       0m (0%)        0m (0%)       3m (0%)    0Mi (0%)          0Mi (0%)        28Mi (0%)
myk8s-control-plane   catalog-6cf4b97d-zgvjc   istio-proxy   10m (0%)       2000m (20%)   6m (0%)    40Mi (0%)         1024Mi (8%)     50Mi (0%)

#
kubectl get pod -n istio-system -l istio.io/rev=default
kubectl resource-capacity -n istio-system -c -u
kubectl resource-capacity -n istio-system -c -u -a -l istio.io/rev=default
kubectl resource-capacity -n istio-system -c -u -l istio.io/rev=default

NODE                  POD                                     CONTAINER     CPU REQUESTS   CPU LIMITS    CPU UTIL   MEMORY REQUESTS   MEMORY LIMITS   MEMORY UTIL
                                                                                                                                                      
myk8s-control-plane   *                                       *             30m (0%)       4000m (40%)   23m (0%)   180Mi (1%)        2048Mi (17%)    167Mi (1%)
myk8s-control-plane   istio-egressgateway-85df6b84b7-vh2vc    *             10m (0%)       2000m (20%)   9m (0%)    40Mi (0%)         1024Mi (8%)     50Mi (0%)
myk8s-control-plane   istio-egressgateway-85df6b84b7-vh2vc    istio-proxy   10m (0%)       2000m (20%)   9m (0%)    40Mi (0%)         1024Mi (8%)     50Mi (0%)
myk8s-control-plane   istio-ingressgateway-6bb8fb6549-dl6gk   *             10m (0%)       2000m (20%)   12m (0%)   40Mi (0%)         1024Mi (8%)     53Mi (0%)
myk8s-control-plane   istio-ingressgateway-6bb8fb6549-dl6gk   istio-proxy   10m (0%)       2000m (20%)   12m (0%)   40Mi (0%)         1024Mi (8%)     53Mi (0%)
myk8s-control-plane   istiod-8d74787f-kmpz8                   *             10m (0%)       0m (0%)       3m (0%)    100Mi (0%)        0Mi (0%)        65Mi (0%)
myk8s-control-plane   istiod-8d74787f-kmpz8                   discovery     10m (0%)       0m (0%)       3m (0%)    100Mi (0%)        0Mi (0%)        65Mi (0%)
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238004a2a4fb2ebd1ea9ad&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(참고) kubectl top 파드/컨테이너 리소스 사용 확인&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380879cbaea5bd040d0d1&quot; class=&quot;notion-bookmark&quot; style=&quot;box-sizing: border-box; margin: 4px 0px; border-radius: 5px; border-image: none 100% / 1 / 0 stretch; transition: background 120ms ease-in; border: 1px solid #e9e9e7;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit; display: flex;&quot; href=&quot;https://themapisto.tistory.com/55&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
&lt;div class=&quot;notion-bookmark__content&quot; style=&quot;box-sizing: border-box; overflow: hidden; flex: 4 1 180px; padding: 12px 0px 10px 14px;&quot;&gt;
&lt;h5 class=&quot;notion-bookmark__title&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 2px; line-height: 1.25rem; font-size: 0.875rem; text-wrap-mode: nowrap; overflow: hidden; text-overflow: ellipsis;&quot;&gt;[프로메테우스](4) CPU / 메모리 사용률 계산하기&lt;/h5&gt;
&lt;p class=&quot;notion-bookmark__description&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-size: 0.75rem; line-height: 1rem; opacity: 0.6; height: 2rem; overflow: hidden;&quot; data-ke-size=&quot;size16&quot;&gt;프로메테우스는 PromQL을 사용하여 메트릭을 수집한다.&amp;nbsp; Pod 와 Service 단위의 모니터링을 개발 해야 할 때 , 프로메테우스에서는&amp;nbsp;쿼리를 통한 가공이 필요하다.container_cpu_seconds_total 데이터와 container_memory_work_bytes 데이터를 가공메모리는 정량적인 사용량 기반으로 메트릭을 단순하게 뽑아낼수 있는데,&amp;nbsp; cpu는 전체 core에 대한 영향을 받기 때문에 함수 이용목표1. 컨테이너 또는 POD의 리소스 사용량 (CPU, 메모리)에 대한 메트릭을 계산2. 프로메테우스의 함수에 대해서 이해&amp;nbsp;CPU는 분모가 명확하지 않기때문에, sum 또는 rate 함수를 적용해야한다.&amp;nbsp;&amp;nbsp;&amp;nbsp;1. CPU 계산법&amp;nbsp;컨테이너는 쿠버네티스의 가장 최소단위로 한개의 POD안에 여러..&lt;/p&gt;
&lt;div class=&quot;notion-bookmark__link&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; margin-top: 6px;&quot;&gt;
&lt;div style=&quot;box-sizing: border-box; margin-inline-end: 6px; display: flex;&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: contain; object-position: center center;&quot; src=&quot;https://t1.daumcdn.net/tistory_admin/favicon/tistory_favicon_32x32.ico&quot; width=&quot;16&quot; height=&quot;16&quot; /&gt;&lt;/div&gt;
&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-size: 0.75rem; line-height: 1rem; text-wrap-mode: nowrap; overflow: hidden; text-overflow: ellipsis;&quot; data-ke-size=&quot;size16&quot;&gt;themapisto.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;notion-bookmark__cover&quot; style=&quot;box-sizing: border-box; flex: 1 1 180px; position: relative; width: 500px; height: 6.75rem;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; display: block; object-fit: cover; border-radius: 0px 4px 4px 0px; width: 312.406px; height: 108px;&quot; src=&quot;https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2Gud4%2FbtqRL2TutON%2F6yaKBe8WfCjX6rZxziaXLk%2Fimg.jpg&quot; alt=&quot;[프로메테우스](4) CPU / 메모리 사용률 계산하기&quot; width=&quot;250&quot; height=&quot;108&quot; /&gt;&lt;/div&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807b8e0afbd04a262898&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f2a263e5f060b37ab4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 11.6은 CPU 사용률 메트릭을 시각화하는 그래프를 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a7b316cdc719a126d0&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/0968917f-e1c9-49f9-a90e-4a78f375f433/CleanShot_2025-05-11_at_13.41.12.png?table=block&amp;amp;id=1f6b8b2c-1c23-80a7-b316-cdc719a126d0&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=PEfkfXZrkxpk9VnWZfWWGdp_g-pds8pF0jyhlEXC0AE&quot; alt=&quot;image&quot; width=&quot;411.97442626953125&quot; height=&quot;377.9765367230165&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380979e34f7805b8863ed&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a8b488c8048c1dd139&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 그래프는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt; 에서 가장 일반적인 사용 패턴을 나타내는데, 대부분의 시간이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;유휴&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;idle&lt;/span&gt; 시간이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238067b38de8e242febd58&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스가 배포될 때 컴퓨팅 요청이 급증&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;하는데, &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod가 엔보이 설정을 생성&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;해 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모든 워크로드로 푸시&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;하기 때문이다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380aeb98ec002a949bee3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인이 포화되면 리소스가 부족한 것이므로, 할당량을 다시 생각해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801e9f13f5a174a707f2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인 동작을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;최적화&lt;/span&gt;하기 위해 다른 접근법을 시도했었다면, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;리소스를 늘리는 것&lt;/span&gt;이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;최선의 선택&lt;/span&gt;일 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23808c94e7e9dca4043927&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380bf936ecdf5dc86dc0b&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;트래픽&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;: 컨트롤 플레인의 부하는 어느 정도인가?&lt;/u&gt;&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TRAFFIC&lt;/span&gt;&lt;/span&gt;: WHAT IS THE LOAD ON THE CONTROL PLANE?&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238022a719c0516306f6c5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽은 시스템이 겪는 부하를 측정한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The traffic metrics measure the load the system experiences.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238038a377f16ce227d330&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어, 웹 애플리케이션에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;부하&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;초당 요청 수&lt;/span&gt; (rps) 로 정의한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;for a web application, the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;load&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; is defined by &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;requests&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;per&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;second&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380abbd28d36de466d1de&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;한편, 이스티오의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인&lt;/span&gt;에는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 수신 트래픽&lt;/span&gt;(설정 변경 형태)과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;송신 트래픽&lt;/span&gt;(데이터 플레인으로 변경 푸시)이 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;receiving &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;incoming&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; traffic (in the form of&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; configuration changes&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;) &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;outgoing&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; traffic (&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;pushing&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;changes&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; to the data plane)&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b994c3c61083553057&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;성능을 제한하는 요인을 찾으려면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;양방향 트래픽&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모두 측정&lt;/span&gt;해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806d8bedc93874d8586c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그리고 그 측정치에 기반해 성능을 개선하는 데 여러 접근 방식을 취할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380019b50deba91fb3b49&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/e4c36c5d-2a5c-4f6b-aed4-271cee2a6eb8/CleanShot_2025-05-11_at_13.59.22.png?table=block&amp;amp;id=1f6b8b2c-1c23-8001-9b50-deba91fb3b49&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=zDxszOaBKY-hvW-q4yorkBUPQb_-4bANFu-DbruwAig&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;357.44430844553244&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23808097d3cc7841668367&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pilot Pushes 는 푸신 빈도. XDS Active Connections 는 컨트롤 플레인이 관리하는 엔드포인트 개수.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238064ad57e090144d8b74&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380cbb51dc67de0d9b660&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;수신 트래픽&lt;/span&gt;에 대한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭&lt;/span&gt;은 다음과 같다.
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b98ea1e3b4c4dedf83&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;각 istiod 인스턴스가&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 설정 변경 수신 횟수&lt;/span&gt;를 보여준다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;shows the count of configuration updates received per istiod instance&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ada564d5aeaca68f52&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;pilot_inbound_updates&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c29166f1c661369504&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380da9735d4fceec4bb64&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;pilot_push_triggers&lt;/code&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802691bddbf3d45aeeb2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;푸시를 유발한 전체 이벤트 횟수&lt;/span&gt;다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;the total count of events that triggered a push&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238021b240d7210627bbd7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;푸시 원인은 서비스, 엔드포인트, 설정 중 한다. 여기서 설정이란 Gateway나 VirtualService 같은 이스티오 커스텀 리소스를 말한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;service, endpoint, or config, where config represents any Istio custom resource such as Gateway or VirtualService.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380768fedc6444dbb49bc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f1a774d71dc1726d70&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;pilot_services&lt;/code&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801faa49ed6379569547&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;파일럿이 인지하고 있는 서비스 개수&lt;/span&gt;를 측정한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;measures the number of services known to the pilot.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238062969efd7928b8c8c0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;파일럿이 인지하는 서비스 개수가 늘어날수록, 이벤트를 수신할 때 엔보이 설정을 만들어내는 데 필요한 처리가 더 많아진다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380659added2bbfab0e0d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서, 이 수치는 istiod가 수신 트래픽 때문에 받는 부하량이 결정되는데 중요한 역할을 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e0967acea54bac420c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/d7a17820-f1ff-470e-a6ab-1992031ecc19/CleanShot_2025-05-11_at_14.16.38.png?table=block&amp;amp;id=1f6b8b2c-1c23-80e0-967a-cea54bac420c&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=-bqaRnszOQJ2YRMgNO5RNr-9OtoatAuE15C8tFtdYv0&quot; alt=&quot;image&quot; width=&quot;528&quot; height=&quot;271.4675540765391&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23802b96e3d3dcde279799&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;avg(pilot_virt_services{app=&quot;istiod&quot;})   # istio vs 개수: kubectl get vs -A --no-headers=true | wc -l
avg(pilot_services{app=&quot;istiod&quot;})        # k8s service 개수: kubectl get svc -A --no-headers=true | wc -l&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238028b01be6ccb3f55148&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23805f9742d5f68540f0fb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;발신 트래픽&lt;/span&gt;에 대한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭&lt;/span&gt;은 다음과 같다.
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ca8a47e6c2094ef72a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;리스너, 루트, 클러스터, 엔드포인트 업데이트와 같이 컨트롤 플레인이 수행하는 모든 유형의 푸시를 측정한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809d9d3ac3f61e32ea7a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 메트릭은 Istio Control Plane 대시보드에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pilot Pushes&lt;/span&gt; 라는 이름의 그래프(패널)로 표시된다. (그림 11.7 참조)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809db6aae2c62f4180d8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;pilot_xds_pushes&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238079ba5bff4fc859a34d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/9ac7470f-be6f-4a41-928a-dc71b07eca82/CleanShot_2025-05-11_at_14.15.38.png?table=block&amp;amp;id=1f6b8b2c-1c23-8079-ba5b-ff4fc859a34d&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=0fSr_HeY6Ze9DdH3DtBae2njS1Y2vsO3C_Ju-cuXLwQ&quot; alt=&quot;image&quot; width=&quot;528&quot; height=&quot;299.841059602649&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23802a802ccb588d5c2862&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;lisp&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;sum(irate(pilot_xds_pushes{type=&quot;cds&quot;}[1m]))
sum(irate(pilot_xds_pushes{type=&quot;eds&quot;}[1m]))
sum(irate(pilot_xds_pushes{type=&quot;lds&quot;}[1m]))
sum(irate(pilot_xds_pushes{type=&quot;rds&quot;}[1m]))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807e8b27cc35b2eaf1cf&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d3aa09ed94dd5d2cc0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;pilot_xds&lt;/code&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f196b6e937c05b89fc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드로의 전체 커넥션 개수를 파일럿 인스턴스별로 보여준다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;total connections to workloads handled per pilot instance.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238067bf46e272d215b2bc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 메트릭은 Istio Control Plane 대시보드에서 ADS Monitoring 라는 이름의 그래프(패널)로 표시된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380919595f3a6b0c7ce2a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/847e3cd7-384a-48cb-8a5f-865daeb54d34/CleanShot_2025-05-11_at_14.04.33.png?table=block&amp;amp;id=1f6b8b2c-1c23-8091-9595-f3a6b0c7ce2a&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=1qliZFMXKALKB1tfxPbamu4gq3hQNhFN-yJ9aa3S8D4&quot; alt=&quot;image&quot; width=&quot;528&quot; height=&quot;274.23946037099495&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23809785d6f5fb0a6ef4b6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;avg(pilot_virt_services{app=&quot;istiod&quot;})   # istio vs 개수: kubectl get vs -A --no-headers=true | wc -l
avg(pilot_services{app=&quot;istiod&quot;})        # k8s service 개수: kubectl get svc -A --no-headers=true | wc -l

# docker exec -it myk8s-control-plane istioctl proxy-status
pilot_xds
pilot_xds{app=&quot;istiod&quot;}
sum(pilot_xds{app=&quot;istiod&quot;})
sum(pilot_xds{app=&quot;istiod&quot;}) by (pod)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23801cb44ae4f521489db8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d6baf0e82a4b1827df&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;envoy_cluster_upstream_cx_tx_bytes_total&lt;/code&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801393d1c782ba7ff12c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네트워크로 전송된 설정 크기를 측정한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;the configuration size that is transferred over the network.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b7b653d5e5acf71aad&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;대시보드에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;XDS Requests Size&lt;/span&gt; 패널에 Legend: &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;XDS Request Bytes Average&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807a80e2e630dd8cb3a2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/6acb2018-4e78-4013-8e4c-eeabe5d770cf/CleanShot_2025-05-11_at_14.13.06.png?table=block&amp;amp;id=1f6b8b2c-1c23-807a-80e2-e630dd8cb3a2&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=WznfEfh5_rRhPE_nLAmSPqOMtxjIEecmoNLT3wayHvQ&quot; alt=&quot;image&quot; width=&quot;528&quot; height=&quot;273.25542570951586&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c29c5eea8892f0574c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;lisp&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# rx
max(rate(envoy_cluster_upstream_cx_rx_bytes_total{cluster_name=&quot;xds-grpc&quot;}[1m]))
quantile(0.5, rate(envoy_cluster_upstream_cx_rx_bytes_total{cluster_name=&quot;xds-grpc&quot;}[1m]))

# tx
max(rate(envoy_cluster_upstream_cx_tx_bytes_total{cluster_name=&quot;xds-grpc&quot;}[1m]))
quantile(.5, rate(envoy_cluster_upstream_cx_tx_bytes_total{cluster_name=&quot;xds-grpc&quot;}[1m]))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23805a864fe33a8a5e9667&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380699b0ff8de219ddc59&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;수신 트래픽과 송신 트래픽을 구분하면 포화의 원인과 사용할 수 있는 완화책이 명확해진다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380039108ea1dd5a8c14a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;포화가 수신 트래픽 때문에 생기는 것이면 성능 병목은 변화율 때문이며, 해결책은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이벤트 배치 처리를 늘려 DiscoveryServer가 더 많은 DeBounce를 통해 이벤트를 한번에 queue로 보내도록 하거나, 스케일 업하여 CPU를 늘려 istiod가 더 많은 event를 처리 할 수 있도록 &lt;/span&gt;하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238004acc4c43373a7e464&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;만약 포화가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;송신 트래픽과 관련&lt;/span&gt; 있으면,&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 해결책&lt;/span&gt;은 각 파일럿이 관리하는 인스턴스가 줄어들 수 있도록 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인을 스케일 아웃&lt;/span&gt;하거나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모든 워크로드에 대해 사이드카 리소스를 정의(=push 되는 config수 자체를 줄여서 envoy config size를 최소화)&lt;/span&gt;하는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238059a9f8f01c3d33fb1a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23806490c5d8aae470789c&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;오류&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;: 컨트롤 플레인의 실패율은 어떻게 되는가?&lt;/u&gt;&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ERRORS&lt;/span&gt;&lt;/span&gt;: WHAT IS THE FAILURE RATE IN THE CONTROL PLANE?&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803b8248f9a227033ea1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;오류&lt;/span&gt;는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; isiotd의 실패율&lt;/span&gt;을 나타내며, 보통은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스가 포화 상태&lt;/span&gt;에 이르러 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;성능이 저하&lt;/span&gt;됐을 때 발생한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380da8c50e4f393f7045f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;가장 중요한 오류 메트릭들은 표 11.1에 나열했는데, 이들은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pilot Errors&lt;/span&gt; 라는 이름으로 Istio Control Plane 대시보드에 시각화돼 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23808e93a4eb560286e8dc&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/f6a8e6ec-0090-4fdb-a69b-09bfe42f8936/CleanShot_2025-05-11_at_14.27.09.png?table=block&amp;amp;id=1f6b8b2c-1c23-808e-93a4-eb560286e8dc&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=3FJ56NiqFuhxMilBsPWQ8hfs3kSxKtz9SMFuzWpnQVs&quot; alt=&quot;image&quot; width=&quot;598.9772338867188&quot; height=&quot;307.98829388499064&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380bfb890c76ccf512ef5&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;stata&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 각 쿼리 패턴에 Legend 확인
Legend(Rejected CDS Configs) : sum(pilot_xds_cds_reject{app=&quot;istiod&quot;}) or (absent(pilot_xds_cds_reject{app=&quot;istiod&quot;}) - 1)
Legend(Rejected EDS Configs) : sum(pilot_xds_eds_reject{app=&quot;istiod&quot;}) or (absent(pilot_xds_eds_reject{app=&quot;istiod&quot;}) - 1)
Legend(Rejected RDS Configs) : sum(pilot_xds_rds_reject{app=&quot;istiod&quot;}) or (absent(pilot_xds_rds_reject{app=&quot;istiod&quot;}) - 1)
Legend(Rejected LDS Configs) : sum(pilot_xds_lds_reject{app=&quot;istiod&quot;}) or (absent(pilot_xds_lds_reject{app=&quot;istiod&quot;}) - 1)
Legend(Write Timeouts) : sum(rate(pilot_xds_write_timeout{app=&quot;istiod&quot;}[1m]))
Legend(Internal Errors) : sum(rate(pilot_total_xds_internal_errors{app=&quot;istiod&quot;}[1m]))
Legend(Config Rejection Rate) : sum(rate(pilot_total_xds_rejects{app=&quot;istiod&quot;}[1m]))
Legend(Push Context Errors) : sum(rate(pilot_xds_push_context_errors{app=&quot;istiod&quot;}[1m]))
Legend(Push Timeouts) : sum(rate(pilot_xds_write_timeout{app=&quot;istiod&quot;}[1m]))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;notion-table__wrapper&quot; style=&quot;box-sizing: border-box; overflow-x: auto;&quot;&gt;
&lt;table class=&quot;notion-table col-header&quot; style=&quot;margin: 8px 0px 18px; border-collapse: collapse;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;
&lt;tr style=&quot;box-sizing: border-box; background-color: #e6e6e5;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 247.172px; max-width: 247.172px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;메트픽&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 583px; max-width: 583px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;설명&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 247.172px; max-width: 247.172px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;pilot_total_xds_rejects&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 583px; max-width: 583px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;설정 푸시 거부 횟수&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 247.172px; max-width: 247.172px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;pilot_xds_&amp;rsquo;cds/lds/rds/cds&amp;rsquo;_reject&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 583px; max-width: 583px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;pilot_total_xds_rejects 메트릭의 부분집합. 어느 API 푸시가 거부됐는지 수사망을 좁히는 데 유용함&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 247.172px; max-width: 247.172px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;pilot_xds_write_timeout&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 583px; max-width: 583px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;push를 시작할 때 발생한 오류와 타임아웃의 합계&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 247.172px; max-width: 247.172px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;pilot_xds_push_context_errors&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 583px; max-width: 583px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;엔보이 설정을 생성하는 동안 발생한 이스티오 파일럿 오류 횟수. 주로 이스티오 파일럿의 버그와 관련&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f899b1c18f975d3c17&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;표에서 가장 중요한 메트릭들이 포함돼 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e2b4a1e333aaee8d68&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 메트릭들은 컨트롤 플레인 상태는 어떤지, 컨트롤 플레인이 어떻게 동작하는지를 알려줘 성능 병목을 밝히는 데 도움이 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a18d24c4fa1f7c8724&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23809c95a9daab905121fd&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1f6b8b2c1c23803c8d45fef704eab9cb&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;11.3. 성능 튜닝하기&lt;/p&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380308822fece4fd53aaf&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : 컨트롤 플레인 성능의 변수&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238053a45df2ab2757e41a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인의 성능 요인은 클러스터/환경의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;변화율(rate)&lt;/span&gt;, 리소스 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;할당량&lt;/span&gt;, 관리하는 워크로드 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;개수&lt;/span&gt;, 그 워크로드로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;푸시하는 설정 크기&lt;/span&gt; 라는 점을 돌이켜보자. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Recall that the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;control-plane performance factors&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; are the rate of &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;changes&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; in the cluster/environment, the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;resources&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; allocated to it, the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;number&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; of workloads it manages, and the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;configuration size pushed &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;to those workloads.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f190a8de2aabb25402&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이들 중 하나라도 병목이 되면, 성능을 개선할 수 있는 방법은 그림 11.8처럼 여러 가지가 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238075b727cd0e0c56a566&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/6919e41f-6242-441a-aa8a-ea2bd8030e78/CleanShot_2025-05-11_at_14.54.29.png?table=block&amp;amp;id=1f6b8b2c-1c23-8075-b727-cd0e0c56a566&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=YKgwMKcL6MLV3mcaTCGlTn1BLBuIAAv_NUwNVRHhn-Y&quot; alt=&quot;컨트롤 플레인 성능을 개선할 수 있는 방법&quot; width=&quot;682.9971313476562&quot; height=&quot;350.9985257731&quot; /&gt;컨트롤 플레인 성능을 개선할 수 있는 방법&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b5ba5cd1e4e037c68d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인 성능의 변수 The knobs of control-plane performance:
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380bda66bcf3aeea78595&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istiod 디플로이먼트 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스케일 아웃&lt;/span&gt;하기 : 관리하는 워크로드를 파일럿 인스턴스들에 나눠 부하를 경감&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d8bbdaf2645c6f72e2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istiod 디플로이먼트 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스케일 업&lt;/span&gt;하기 : 엔보이 설정 생성 속도를 높이고 더 많은 푸시 요청을 동시에 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800fa876e67a7f550780&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;해당 프로세스에 필요한 최소한의 요청만을 보냄으로써 서비스 프록시에 보내는 설정 크기를 줄인다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b69cd4ed493ca49aee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이벤트 하나로 업데이트되는 프록시 개수를 줄인다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806e91abf2ad03a6e359&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 메시와 관련 없는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이벤트 무시&lt;/span&gt;하기. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Ignoring events&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; that are not relevant to the service mesh. &amp;rarr; outbound traffic 관점&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806d8e44d6c2a3b9bf55&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이벤트 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;배치 처리 기간을 좀 더 늘려 &lt;/span&gt;데이터 플레인 업데이트에 필요한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;푸시 횟수 줄이기 &amp;rarr; inbound traffic 관점&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Batching events for a &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;longer&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;period&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; to &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;reduce&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; the&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; number&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; of &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;pushes&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; required to &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;update&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; the data plane.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23808fb7c0da26fa49c2e3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 방법으로 리소스 추가 할당 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Allocating additional resources by&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238079b58bd49a3e662f41&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드가 관련 있는 설정을 컨트롤 플레인에게 알리는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;사이드카 설정&lt;/span&gt;을 정의해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;관련 있는 업데이트만 워크로드로 푸시&lt;/span&gt;하기. 2가지 이점. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Pushing only relevant updates to workloads by defining a sidecar configuration that informs the control plane about the relevant configuration for a workload.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b9bcefce418eea7a32&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d0a718df4d544ab1db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 방법으로 어떻게 성능을 개선하는지 보여줄 수 있도록 클러스터에 서비스를 준비하고 성능 테스트를 정의해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380be97daf8fd74e2217f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380dab094e10fd05194f6&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;11.3.1 워크스페이스 준비하기&lt;/span&gt; : 실습 환경 준비 -&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 더미 워크로드와 서비스 생성&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803abad2d630bcfe301c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istiod에게 관리할 워크로드를 주기 위해 catalog 워크로드와 더미 워크로드 10개를 만들어보자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e49a78fcaf3a9b16c2&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 실습 환경 준비 : 11.2.1 에서 이미 설정함
kubectl -n istioinaction apply -f services/catalog/kubernetes/catalog.yaml
kubectl -n istioinaction apply -f ch11/catalog-virtualservice.yaml
kubectl -n istioinaction apply -f ch11/catalog-gateway.yaml
kubectl get deploy,gw,vs -n istioinaction

# 반복 설정 해두기
while true; do curl -s http://catalog.istioinaction.io:30000/items ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done

# 모니터링
while true; do kubectl top pod -n istio-system -l app=istiod --containers=true ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done
POD                     NAME        CPU(cores)   MEMORY(bytes)   
istiod-8d74787f-kmpz8   discovery   3m           61Mi            
2025-05-18 00:46:01

POD                     NAME        CPU(cores)   MEMORY(bytes)   
istiod-8d74787f-kmpz8   discovery   3m           61Mi            
2025-05-18 00:46:03
...


# 더미 워크로드 10개 생성
cat ch11/sleep-dummy-workloads.yaml
...
apiVersion: v1
kind: Service
...
spec:
  ports:
  - port: 80
    name: http
  selector:
    app: sleep
---
apiVersion: apps/v1
kind: Deployment
...
    spec:
      serviceAccountName: sleep
      containers:
      - name: sleep
        image: governmentpaas/curl-ssl
        command: [&quot;/bin/sleep&quot;, &quot;3650d&quot;]
        imagePullPolicy: IfNotPresent
...

kubectl -n istioinaction apply -f ch11/sleep-dummy-workloads.yaml


# 확인
kubectl get deploy,svc,pod -n istioinaction
...

docker exec -it myk8s-control-plane istioctl proxy-status

NAME                                                   CLUSTER        CDS        LDS        EDS        RDS          ECDS         ISTIOD                    VERSION
catalog-6cf4b97d-zgvjc.istioinaction                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-kmpz8     1.17.8
istio-egressgateway-85df6b84b7-vh2vc.istio-system      Kubernetes     SYNCED     SYNCED     SYNCED     NOT SENT     NOT SENT     istiod-8d74787f-kmpz8     1.17.8
istio-ingressgateway-6bb8fb6549-dl6gk.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-kmpz8     1.17.8
sleep-6f8cfb8c8f-7qxlw.istioinaction                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-kmpz8     1.17.8
sleep-6f8cfb8c8f-9sclj.istioinaction                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-kmpz8     1.17.8
sleep-6f8cfb8c8f-cw64t.istioinaction                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-kmpz8     1.17.8
sleep-6f8cfb8c8f-glxgl.istioinaction                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-kmpz8     1.17.8
sleep-6f8cfb8c8f-grf6s.istioinaction                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-kmpz8     1.17.8
sleep-6f8cfb8c8f-h6t52.istioinaction                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-kmpz8     1.17.8
sleep-6f8cfb8c8f-j4m56.istioinaction                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-kmpz8     1.17.8
sleep-6f8cfb8c8f-tts86.istioinaction                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-kmpz8     1.17.8
sleep-6f8cfb8c8f-xnvvc.istioinaction                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-kmpz8     1.17.8
sleep-6f8cfb8c8f-zvh5p.istioinaction                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-kmpz8     1.17.8

#
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/catalog.istioinaction --fqdn sleep.istioinaction.svc.cluster.local
SERVICE FQDN                              PORT     SUBSET     DIRECTION     TYPE     DESTINATION RULE
sleep.istioinaction.svc.cluster.local     80       -          outbound      EDS 

docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/catalog.istioinaction
10.10.0.15:80                                           HEALTHY     OK                outbound|80||sleep.istioinaction.svc.cluster.local
10.10.0.16:80                                           HEALTHY     OK                outbound|80||sleep.istioinaction.svc.cluster.local
10.10.0.17:80                                           HEALTHY     OK                outbound|80||sleep.istioinaction.svc.cluster.local
10.10.0.18:80                                           HEALTHY     OK                outbound|80||sleep.istioinaction.svc.cluster.local
10.10.0.19:80                                           HEALTHY     OK                outbound|80||sleep.istioinaction.svc.cluster.local
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23809bbc0ccba2d3d4eb6b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/730f8cb7-a60e-4ce0-89d5-72ce220ef63f/CleanShot_2025-05-11_at_15.18.18.png?table=block&amp;amp;id=1f6b8b2c-1c23-809b-bc0c-cba2d3d4eb6b&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=nOS0bwNa5jC1I3CYeRk7euF1flY6PFRYmjbsYjEVvB0&quot; alt=&quot;image&quot; width=&quot;192.98294067382812&quot; height=&quot;231.97949345247733&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380df9190d0a55e50e4fc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그라파나 대시보드 : Last 5 minutes&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23803ab99df8a4b3accebc&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/f6ed1151-358a-4a6e-a4a8-d571b52ed621/image.png?table=block&amp;amp;id=1f6b8b2c-1c23-803a-b99d-f8a4b3accebc&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=URktwivMjP1CkXgoUtd3f21InwwAR1VM-Q63hdEbVCQ&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;414.3810548977395&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d3bb6ef2ad0094b78e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/4e33d359-b3b1-4230-84e2-b6344fe755b2/image.png?table=block&amp;amp;id=1f6b8b2c-1c23-80d3-bb6e-f2ad0094b78e&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=IJPstn24LmnahFtFG266rCp4ds_4Tymhls-Arydxx8Y&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;148.9655172413793&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b797f7d336c72d229d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 정도는 파일럿에게 아직도 너무 쉽다. 몇 가지 더미 서비스로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 설정을 부풀려&lt;/span&gt; 상황을 악화시켜보자 : svc 200개, vs 200개, gw 200개&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380efbd16e9e6a897886e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
cat ch11/resources-600.yaml
cat ch11/resources-600.yaml | wc -l
    9200

# 각각 200개
cat ch11/resources-600.yaml | grep 'kind: Service' | wc -l
cat ch11/resources-600.yaml | grep 'kind: Gateway' | wc -l
cat ch11/resources-600.yaml | grep 'kind: VirtualService' | wc -l
     200

# 배포 : svc 200개, vs 200개, gw 200개
kubectl -n istioinaction apply -f ch11/resources-600.yaml


# 확인
kubectl get deploy,svc,pod -n istioinaction
...

# k8s service 개수 202개
kubectl get svc -n istioinaction --no-headers=true | wc -l 
     202

kubectl get gw,vs -n istioinaction
...

#
docker exec -it myk8s-control-plane istioctl proxy-status
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/catalog.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config route deploy/catalog.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/catalog.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/catalog.istioinaction
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380cfb468cdd7ef301550&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그라파나 대시보드 : Last 15 minutes&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380f09c0bec4539b53ea4&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/334809d1-8a2f-405d-b983-0de864664aae/CleanShot_2025-05-11_at_15.16.39.png?table=block&amp;amp;id=1f6b8b2c-1c23-80f0-9c0b-ec4539b53ea4&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=0WXaoB8LYhJfwYx7Q8sXHYJcdMCOR2csJhg8J0vA3v0&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;161.68421052631578&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238059acc0f084aab228f9&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/da48c261-f1a9-4ceb-9978-0a7d7cbe86d5/CleanShot_2025-05-11_at_15.16.47.png?table=block&amp;amp;id=1f6b8b2c-1c23-8059-acc0-f084aab228f9&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=DMxX3la5958wBboGq5krbGljlCT30pOMdvkjOhBMwlc&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;368.53333333333336&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238067a47ee12f0b18c599&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/959983f7-d2c0-49ee-9468-e09b0be610bc/CleanShot_2025-05-11_at_15.17.24.png?table=block&amp;amp;id=1f6b8b2c-1c23-8067-a47e-e12f0b18c599&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=9r-GjTuqLoJw2wvk4vCofs6VLK2-PJwYot1cNLO0QFs&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;182.95844875346262&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a89defd54b89bee350&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f79c38d4e6666e18fd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그래서 이제 istiod 인스턴스 하나가 인그레스 및 이그레스 게이트웨이를 포함해 워크로드(istio-proxy 동작)를 13개 관리하며, 서비스는 총 600개(svc + vs + gw) 인지하고 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238083b8d8cb202f09c9c2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 개수는 엔보이 설정을 만드는 데 필요한 처리량을 늘리고, 워크로드로 보내야 하는 설정을 부풀린다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;So now the single istiod instance manages &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;13 workloads&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, including ingress and egress gateways, and &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;another 600 total services &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;are known to it, which increases the amount of processing to generate the Envoy configuration and bloats the configuration that has to be pushed to the workloads.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23804591ebf60df21d4750&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23802bbf34fbf454e0d32e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;11.3.2 최적화 전 성능 측정하기*&lt;/span&gt;&lt;/span&gt; Measuring performance before optimizations &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Sidecar&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380359f50db20170b2ac8&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;테스트 실행&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380dbb0d4f4bddea62830&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;사이드카를 사용해 푸시 횟수 및 설정 크기 줄이기&lt;/u&gt;&lt;/span&gt; REDUCING CONFIGURATION SIZE AND NUMBER OF PUSHES USING SIDECARS&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b5b43ffcdc7a40293a&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;Sidecar 리소스&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23800b8e6df5d037700010&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;메시 범위 사이드카 설정으로 더 나은 기본값 정의하기&lt;/u&gt;&lt;/span&gt; DEFINING BETTER DEFAULTS WITH A MESH-WIDE SIDECAR CONFIGURATION&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23800b9109ea78f118914e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://youtu.be/4sJd6PIkP_s?si=xEMYgy7YC5TsOAJg&amp;amp;t=466&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/4d31fb70-e44f-459e-bedc-c65452e75ba3/CleanShot_2025-05-12_at_12.53.19.png?table=block&amp;amp;id=1f6b8b2c-1c23-800b-9109-ea78f118914e&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=2iBdpZFE2Zrb55C_69Oi-7a1LP8HjRPG0kye8iyoPDM&quot; alt=&quot;https://youtu.be/4sJd6PIkP_s?si=xEMYgy7YC5TsOAJg&amp;amp;t=466&quot; width=&quot;624&quot; height=&quot;304.79850280723645&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23806bb8cfd260aedc75eb&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/c39f4f4b-52f7-4a51-9a4f-15798f71c3f5/CleanShot_2025-05-12_at_12.55.49.png?table=block&amp;amp;id=1f6b8b2c-1c23-806b-b8cf-d260aedc75eb&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=NobRXbCQRmrPFdL0_hQpXpyqJR9VGLkBkfODgnFAgwE&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;337.4475668265936&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a1ae8dc00d138d3dc1&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;11.3.3 이벤트 무시하기*&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;: 디스커버리 셀렉터로 디스커버리 범위 줄이기 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;meshConfig.discoverySelectors&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803aa1fce100f9c3b2a6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오 컨트롤 플레인이 기본적으로 K8S 모든 네임스페이스의 파드, 서비스와 기타 리소스의 생성 이벤트를 감지한다는 것은 놀라운 일이다! &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;It may come as a surprise that the Istio control plane by default watches events for the creation of Pods, services, and other resources in &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;all namespaces!&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380de8250e58719cfd269&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;대규모 클러스터에서 이런 동작은 컨트롤 플레인에 부담을 줄 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238065880ff903b1290c9c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;데이터 플레인을 최신 상태로 유지하기 위해 모든 이벤트마다 엔보이 설정을 처리하고 생성하기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238061bf9cf81594b9aa58&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238067aaacd3dfd8771afd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 부담을 줄이기 위해 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Istio 1.10&lt;/code&gt;에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네임스페이스 디스커비리 셀렉터&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;discovery selector&lt;/span&gt; 라는 기능이 새로이 추가돼 istiod 컨트롤 플레인이 감시할 이벤트를 세밀하게 조정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380619924debbb0633146&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 기능을 사용하면 워크로드와 엔드포인트를 감시할 네임스페이스를 명시적으로 지정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380debd42f741729a23c4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네임스페이스 셀렉터 접근법&lt;/span&gt;을 사용하면 동적으로 네임스페이스와 해당 네임스페이스의 각 워크로드를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;포함&lt;/span&gt;하거나, 메시에서 처리하지 않도록 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;제외&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b788e6cdcc566f5438&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;K8S 클러스터에 메시 내 워크로드가&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 절대 라우팅하지 않을 워크로드가 많거나&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;계속 변하는 워크로드가 있는 경우&lt;/span&gt;(스파크 잡 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;spark job&lt;/span&gt; 이 계속 생성되고 종료되는 등) 특히 유용한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238085a00ecf6c56c59176&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 경우 컨트롤 플레인이 이 워크로드들에서 만들어지는 이벤트를 무시하게 만들고 싶을 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b49d22d8fc1d06d018&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238004953eda745eb7c8c1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음과 같이 IstioOperator 파일을 사용해 시작 시 디스커버리 설렉터 기능을 활성화할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23804fbfa8c3e52cc4d4dc&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  namespace: istio-system
spec:
  meshConfig:
    discoverySelectors: # 디스커버리 셀렉터 활성화
      - matchLabels:
          istio-discovery: enabled # 사용할 레이블 지정&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380518d1bf879f23d4879&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인이 처리할 네임스페이&lt;/span&gt;스를 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;istio-discovery: enabled&lt;/code&gt; 레이블이 있는 것으로&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 한정&lt;/span&gt;한다. 네임스페이스에 이 레이블이 없으면 무시한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807ba095c0cfb2f03814&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d0847ed9533666b74e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네임스페이스 대부분을 포함하고 소규모만 제외하려는 경우에는 레이블 비교 표현식을 사용해 어떤 네임스페이스를 포함하지 않을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b5867ff621ddd7d2bf&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;less&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  namespace: istio-system
spec:
  meshConfig:
    discoverySelectors:
      - matchExpressions:
        - key: istio-exclude
          operator: NotIn
          values:
            - &quot;true&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d98d5bc4b67cd0ed01&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(참고) &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;discoverySelectors&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/reference/config/istio.mesh.v1alpha1/#MeshConfig-discovery_selectors&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803daa54e814256865f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;A list of Kubernetes &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;selectors&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; that specify the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;set&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; of &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;namespaces&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; that Istio considers when computing configuration updates for sidecars.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238062a997df47f9f2b754&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806380e5c2e24378790f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;모든 항목을 살피는 기존 동작을 방해하지 않고 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;istio-exclude: true&lt;/code&gt; 레이블이 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네임스페이스&lt;/span&gt;만 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;제외&lt;/span&gt;하도록 다음과 같이 업데이트할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380dc8b8cef007d168b7f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
cat ch11/istio-discovery-selector.yaml

#
docker exec -it myk8s-control-plane cat /istiobook/ch11/istio-discovery-selector.yaml
docker exec -it myk8s-control-plane istioctl install -y -f /istiobook/ch11/istio-discovery-selector.yaml

#
kubectl get istiooperators.install.istio.io -A -o json
...
                &quot;meshConfig&quot;: {
                    &quot;accessLogEncoding&quot;: &quot;JSON&quot;,
                    &quot;accessLogFile&quot;: &quot;/dev/stdout&quot;,
                    &quot;defaultConfig&quot;: {
                        &quot;proxyMetadata&quot;: {}
                    },
                    &quot;discoverySelectors&quot;: [
                        {
                            &quot;matchExpressions&quot;: [
                                {
                                    &quot;key&quot;: &quot;istio-exclude&quot;,
                                    &quot;operator&quot;: &quot;NotIn&quot;,
                                    &quot;values&quot;: [
                                        &quot;true&quot;
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f1adc6ffdb5bcd43bf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;간단 실습 해보기&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238088b5eaec447ea6862b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl create ns new-ns
kubectl label namespace new-ns istio-injection=enabled
kubectl get ns --show-labels

# 테스트를 위해 샘플 nginx 배포
cat &amp;lt;&amp;lt; EOF | kubectl apply -n new-ns -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP
EOF

# 확인
kubectl get deploy,svc,pod -n new-ns
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   1/1     1            1           75s

NAME            TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/nginx   ClusterIP   10.200.0.74   &amp;lt;none&amp;gt;        80/TCP    75s

NAME                       READY   STATUS    RESTARTS   AGE
pod/nginx-9fbb7d78-8phsb   2/2     Running   0          75s

docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system | grep nginx
10.10.0.25:80                                           HEALTHY     OK                outbound|80||nginx.default.svc.cluster.local
10.10.0.26:80                                           HEALTHY     OK                outbound|80||nginx.new-ns.svc.cluster.local

# 설정
kubectl label ns new-ns istio-exclude=true

kubectl get ns --show-labels
NAME                 STATUS   AGE     LABELS
...
new-ns               Active   94s     istio-exclude=true,istio-injection=enabled,kubernetes.io/metadata.name=new-ns

# 다시 확인
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system | grep nginx
10.10.0.25:80                                           HEALTHY     OK                outbound|80||nginx.default.svc.cluster.local&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380e9ae30c1f2a07f8855&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e7a6e9d2599d31895a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;discoverySelectors&lt;/span&gt;를 사용해 디스커버리 범위를 관련 있는 네임스페이스로 줄였는데도 컨트롤 플레인이 여전히 포화 상태인 경우, 다음으로 고려해볼 방법은 각 이벤트를 개별적으로 해결하는 대신 이벤트를 배치 처리해 묶음으로 해결하는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238083b854fdb3a007cfad&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c89753c4d74cae8b23&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;11.3.4 이벤트 배치 처리 및 푸시 스로틀링 속성&lt;/span&gt; Event-batching and push-throttling properties&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380ef8ecbe44608375c96&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;디바운스 기반&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380459fc0dba137afd51a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;데이터 플레인 설정을 바꾸는 런타임 환경 이벤트는 보통 운영자가 제어할 수 없는 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Events in the run-time environment that cause changes to the data-plane configurations are usually outside the operator&amp;rsquo;s control.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380218155c03c9ba5193f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;새로운 서비스가 온라인 상태가 되는 것, 복제본 스케일 아웃, 서비스가 비정상이 되는 것 같은 이벤트들은 모두 컨트롤 플레인이 감지해 데이터 플레인 프록시를 조정한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Events such as new services coming online, scaling up replicas, or services becoming unhealthy are all detected by the control plane and reconciled for the data-plane proxies. &lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800ab021ed7dedf47618&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그래도 업데이트를 얼마나 지연해서 배치 처리할지 정도는 어느 정도 제어할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;However, we have some control when determining how long we may delay updates and batch those events.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802db788f9684cfc2e35&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;배치 처리하면, 이벤트를 한 묶음으로 처리함으로써 엔보이 설정을 한 번만 만들어 데이터 플레인 프록시로 한 번에 푸시할 수 있다는 이점이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1f6b8b2c1c2380aa86acc5dad40c8470&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This has the benefit that the batched events are processed as a group and generate an Envoy configuration that is pushed to the data plane proxies as a single unit.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;div id=&quot;block-1f6b8b2c1c238030a18ce1286f1d7613&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803c9a35c6b2ef01909d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 11.9의 순서도는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이벤트 수신이 서비스 프록시로 변경 사항을 푸시하는 작업&lt;/span&gt;을 어떻게 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;지연시키는지(디바운스)&lt;/span&gt;를 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380cf9eedc23f8fc6e0e6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;디바운스 기반을 더 늘리면&lt;/span&gt;, 지연 기간에서 제외됐던 마지막 이벤트도 배치에 포함시켜 모든 이벤트를 하나의 배치로 합침으로써 하나의 요청으로 푸시할 수 있게된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380baa31ae0d42365c64e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/566b3977-47c2-41d6-a3b9-f77fed75476b/image.png?table=block&amp;amp;id=1f6b8b2c-1c23-80ba-a31a-e0d42365c64e&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=v1w6k49se_Ex8UdUlVY2hxr7UF3QiCyhmRpaoPeQNzU&quot; alt=&quot;image&quot; width=&quot;720&quot; height=&quot;408.89929742388756&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a8863ac02ccc85485a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238050a500dae52dcf6442&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;푸시를 너무 미루면 &lt;/span&gt;데이터 플레인 설정이 오래돼 최신 상태가 아니게 될 수 있는데, 상술한 것처럼 이런 상황 역시 원하는 바가 아니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23807aa0cfd7bae15dbb15&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/bb0c577e-ec7a-4e40-ad9b-52cd99db257e/CleanShot_2025-05-11_at_18.01.38.png?table=block&amp;amp;id=1f6b8b2c-1c23-807a-a0cf-d7bae15dbb15&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=ahiuYJE0qnM-zOS30HhrERYMpksb_EBm-ljebxdxatQ&quot; alt=&quot;이벤트가 어떻게 병합돼 푸시되는지를 보여주는 순서도&quot; width=&quot;864&quot; height=&quot;481.95918367346934&quot; /&gt;이벤트가 어떻게 병합돼 푸시되는지를 보여주는 순서도&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380398a3ddf506d315062&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238058b6b6d2bece5b975e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;한편, 반대로 기간을 줄이면 업데이트가 더 빠르게 수행되는 것이 보장된다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238069a543d7e0f6a3fc1f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 그렇게 하면 컨트롤 플레인이 미처 배포할 수 없을 정도로 푸시 요청이 많아진다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380fdb731e4d22bac38d3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 요청들은 푸시 대기열에서 스로틀링돼 대기 시간 증가로 이어지게 될 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380789a03fa9ba1dd0d98&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380f0b47ad1a1587feb08&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;배치 기간과 푸시 스로틀링을 정의하는 환경 변수&lt;/u&gt;&lt;/span&gt; ENVIRONMENT VARIABLES THAT DEFINE THE BATCHING PERIOD AND PUSH THROTTLING&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380ce8d71f9aff3ddc250&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;배치 기간을 정의하는 환경 변수&lt;/span&gt;는 다음과 같다&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &lt;/span&gt;- &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/reference/commands/pilot-discovery/#envvars&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a7aa7dc81ece926c9e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이벤트를 푸시 대기열에 추가하는 디바운스할 시간&lt;/span&gt;을 지정한다. &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Specifies the time to debounce, adding an event to the push queue.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800cb973d65c1181ec12&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본값은 100ms&lt;/span&gt;인데, 그 의미는 컨트롤 플레인이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이벤트를 받았을 때 푸시 대기열에 추가하는 행동을 100ms 디바운스&lt;/span&gt;한다는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380efa758f15985012e4a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 기간 동안에 추가로 발생하는 이벤트는 앞서 발생한 이벤트에 통합돼 작업이 다시 디바운스한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d09ff6f6729abd5c49&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 기간 동안 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이벤트가 발생하지 않으면, 결과 배치가 푸시 대기열에 추가돼 처리할 준비&lt;/span&gt;가 된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Whenever no events occur in this period, the resulting batch is added to the push queue and is ready for processing.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d69897ed74da2098b6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;예) 100ms (기본값) 이내에 새로운 이벤트가 없으면 queue에 추가하고, 있으면 merge 후 다시 100ms 동안 대기 + 단, 최대&amp;nbsp;PILOT_DEBOUNCE_MAX&amp;nbsp;이내에서 허용&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238010a7c3e684b302121e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이벤트 디바운스를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;허용할 최대 시간&lt;/span&gt;을 지정한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Specifies the maximum time in which debouncing of events is allowed.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238096b2cdfb4e08cbb39a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 시간이 지나면 현재 병합된 이벤트가 푸시 대기열에 추가된다. 이 변수의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본값은 10초&lt;/span&gt;다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809b9319ed363326efae&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔드포인트 업데이트가 디바운스 규칙을 준수할지, 우선권을 줘 푸시 대기열에 즉시 배치할지를 지정한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Specifies if endpoint updates comply with the debounce rules or have priority and land immediately in the push queue.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23807dbe2de16c37dda736&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 변수의 기본값은 true이며, 엔드포인트 업데이트도 디바운스된다는 의미다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380c8a43acf5976f8e1a3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istiod가 동시에 처리하는 푸시 요청 개수를 지정한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Specifies push requests that istiod processes concurrently. &lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238053a354f1b72192e8d1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 변수의 기본값은 100개의 동시 푸시다. CPU 사용률이 낮은 경우, 스로틀 값을 높여서 업데이트를 더 빠르게 할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803aa739dc26d45d7063&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PILOT_DEBOUNCE_AFTER&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238065a870f5590452e416&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PILOT_DEBOUNCE_MAX&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380af97e1cbca0ada6c92&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PILOT_ENABLE_EDS_DEBOUNCE&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f185dedf911ac8fb52&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PILOT_PUSH_THROTTLE&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238009b833e938f98dc6ec&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238068b57cd88bb85c13b2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음은 이런 설정 옵션을 사용할 때의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;일반적인 지침&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;general guidance&lt;/span&gt; 이다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380028491f599f796039c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인이 포화 상태이고 수신 트래픽이 성능 병목을 야기하는 경우 이벤트 배치 처리를 늘린다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809d910ff76c8e5ae89a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;목표가 업데이트 전파를 더 빠르게 하는 것이면 이벤트 배치 처리를 줄이고 동시에 푸시하는 개수를 늘린다. 단, 이 방식은 컨트롤 플레인이 포화 상태가 아닐 때만 권장한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803c8104c8c4e3867be8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인이 포화 상태이고 송신 트래픽이 성능 병목인 경우 동시에 푸시하는 개수를 줄인다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23805392a6dd564ec62bb1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인이 포화 상태가 아니거나, 스케일 업을 했고 빠른 업데이트를 원하는 경우 동시에 푸시하는 개수를 늘린다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23809ca470e8b5adb4d57d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b3888fdd83e73a016e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;배치 기간 늘리기&lt;/u&gt;&lt;/span&gt; INCREASING THE BATCHING PERIOD&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c238056adcbc1a2252eca41&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;배치의 효과&lt;/span&gt;를 보여주기 위해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PILOT_DEBOUNCE_AFTER&lt;/span&gt; 값을 말도 안 되게 높은 값인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2.5초&lt;/span&gt;로 지정하자. (기본값은 100ms ==&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 0.1초&lt;/span&gt;)&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380798de0cec5e3ed419d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서 &amp;lsquo;말도 안 되게&amp;rsquo;라는 수식어는 운영 환경에서는 이렇게 하면 안된다는 것이다. 학습을 위한 실습용 설정임.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380eab68ed71d2ace2a1d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;asciidoc&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# myk8s-control-plane 진입 후 설치 진행
docker exec -it myk8s-control-plane bash
-----------------------------------
# demo 프로파일 컨트롤 플레인 배포 시 적용
istioctl install --set profile=demo --set values.pilot.env.PILOT_DEBOUNCE_AFTER=&quot;2500ms&quot; --set values.global.proxy.privileged=true --set meshConfig.accessLogEncoding=JSON -y
exit
-----------------------------------

#
kubectl get deploy/istiod -n istio-system -o yaml
...
        - name: PILOT_DEBOUNCE_AFTER
          value: 2500ms
...

# 성능 테스트 스크립트 실행!
./bin/performance-test.sh --reps 10 --delay 2.5 --prom-url prometheus.istio-system.svc.cluster.local:9090
Pre Pushes: 124
gateway.networking.istio.io/service-6a0b-0 created
service/service-6a0b-0 created
...
==============
Push count: 42 # 변경 사항을 적용하기 위한 푸시 함수
Latency in the last minute: 0.10 seconds # 마지막 1분 동안의 지연 시간&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804ba410c47689fd22f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PILOT_DEBOUNCE_MAX&lt;/span&gt; 로 정의한 한계값을 넘지 않는 한 모든 이벤트는 병합돼 푸시 큐에 더해지는데, 덕분에 푸시 횟수가 현저히 줄어들었다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238047aef1f8073ce28923&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;푸시 횟수가 기존 442회에서 겨우 42회로 줄었다!&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802f922bda1fca3fa567&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 설정을 만들고 워크로드로 푸시하는 추가 작업을 모두 피해 CPU 사용률과 네트워크 대역폭 소모가 줄어든다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380a9b154d7fc26369697&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380fb8ec3f8190a5f7728&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 예제는 이벤트 디바운스 효과를 설명하기 위한 것이지 일반적으로 사용할 수 있는 istiod 설정이 아니라는 점을 명심하자.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238006a3a9d3a3063eeab5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 컨트롤 플레인 설정은 관찰한 메트릭과 환경에 맞춰 조정할 것을 권장한다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238093b77fd384874cbbcd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그리고 설정을 변경할 때는 컨트롤 플레인의 성능에 부정적인 영향을 줄 수 있는 큰 변화 대신에 조금씩 조절하는 것이 더 안전하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23806b976bde7d84309465&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380c094a8fdc3bc9fc897&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;지연 시간 메트릭은 디바운스 기간을 고려하지 않는다!&lt;/u&gt;&lt;/span&gt; LATENCY METRICS DO NOT ACCOUNT FOR THE DEBOUNCE PERIOD!&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380bcb5c6d1b5030f9b0a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/cf13fb8e-3a7c-478b-a3de-7bd649882fe0/CleanShot_2025-05-11_at_00.34.15.png?table=block&amp;amp;id=1f6b8b2c-1c23-8029-a936-c3c4e77b8788&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=Pi1hrkE23xAxkqkIRAkPma1roTlSjqWQrR_M0xTNYTg&quot; alt=&quot;최신 설정을 워크로드에 푸시하는 작업의 순서&quot; width=&quot;666.9744262695312&quot; height=&quot;377.98550694135355&quot; /&gt;최신 설정을 워크로드에 푸시하는 작업의 순서&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23807498a4fc7ea32a1052&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;디바운스 기간&lt;/span&gt;을 늘린 후 지연 시간 메트릭에 푸시 배포가 10ms 걸린 것으로 나타났지만, 사실은 그렇지 않다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380b4837be634f2332a06&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;지연 시간 메트릭이 측정하는 기간은 푸시 요청이 푸시 대기열에 추가된 시점부터 시작됨&lt;/span&gt;을 기억하자.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23801d9d81cde1d6144a69&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이벤트들이 디바운드되는 동안 업데이트는 전달되지 않았&lt;/span&gt;다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23806cbf5be1674cdf4baf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서 &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;업데이트를 푸시하는 시간은 늘어났지만, 이는 지연 시간 메트릭에서는 나타나지 않는다! &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;And thus, the time of pushing updates increased, but this didn&amp;rsquo;t appear in the latency metrics!&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23805c8a15c55adc457f72&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380f0b050e628e1671b17&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이렇게 이벤트를 너무 오래 디바운스해 지연 시간이 늘어나면 성능이 낮을 때와 마찬가지로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;설정이 낡게(오래되게)&lt;/span&gt; 된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This increased latency caused by debouncing events for too long leads to &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;stale configurations&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, just as&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; low performance&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; would. &lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23800d9197d5cb490d4bcc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서 배치 속성을 조정할 때는 한 번에 너무 크게 변경하는 것보다는 조금씩 변경하는 것이 좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23809d9753c85049c5d855&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1015px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1f6b8b2c1c2380a99f34d93661d06de7&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;데이터 플레인은 보통 늦은 엔드포인트 업데이트에 영향을 받는다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The data plane is commonly affected by late endpoint updates.&lt;/span&gt;&lt;/i&gt; 환경 변수 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PILOT_ENABLE_EDS_DEBOUNCE&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;false&lt;/span&gt;로 설정하면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔드포인트 업데이트&lt;/span&gt;가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;디바운스 기간을 건너뛰어 &lt;/span&gt;지연되지 않음을 보장할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Setting the environment variable PILOT_ENABLE_EDS_DEBOUNCE to false ensures that endpoint updates are not delayed and skip the debouncing period.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23800dac1ee3fe4b229cf1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380ed8f83fe10345b7c04&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;컨트롤 플레인에 리소스 추가 할당하기&lt;/u&gt;&lt;/span&gt; ALLOCATING ADDITIONAL RESOURCES TO THE CONTROL PLANE&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a9b74ecfe17eb3b4b9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Sidecar&lt;/span&gt; 리소스를 정의하고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;discovery selectors&lt;/span&gt;를 사용하고 배치를 설정한 후, 성능을 향상 시킬 수 있는 유일한 방법은 컨트롤 플레인에 리소스를 더 할당하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23808c9fbfe9fe104bc07a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;리소스를 더 할당할 때는 istiod 인스턴스를 추가해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스케일 아웃&lt;/span&gt;하거나, 모든 istiod 인스턴스에 리소스를 추가로 제공해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스케일 업&lt;/span&gt;할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;When allocating additional resources, we can either &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;scale out&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; by adding more&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; istiod instances&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; or s&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;cale up by&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; providing more resources to every instance.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809480aff53a9cfcd9cd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;스케일 아웃을 할지 스케일 업을 할지는 성능 병목 원인에 따라 결정된다.
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809e967acbb72a47e7a8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 istiod 인스턴스당 관리하는 워크로드가 많을 때만 일어난다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This occurs only when there are many workloads managed per istiod instance.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380d7a9e6e21cce532aee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;스케일 아웃은 istiod 인스턴스가 관리하는 워크로드 개수를 줄인다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380288fedde2d1851dd51&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 엔보이 설정을 생성하는 데 리소스(Service, VS, DR 등)을 많이 처리할 때만 일어난다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804f8352d9aa151a316c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;스케일 업하면 istiod 인스턴스에 처리 능력을 더 제공한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380bdb7ffe970e71c0a47&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;송신 트래픽이 병목&lt;/span&gt;일 때는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 스케일 아웃&lt;/span&gt;하자. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Scale out when the outgoing traffic is the bottleneck.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380bb9f11f26cf6499dd5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;수신 트래픽이 병&lt;/span&gt;목일 때는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스케일 업&lt;/span&gt;하자. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Scale up when the incoming traffic is the bottleneck.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c238087b186cdd1ef167d8a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23802b936df4f162b5fc39&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 명령으로 복제본 2 스케일 아웃과 리소스 스케일 업해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380d29150d929acf7a4e7&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl get pod -n istio-system -l app=istiod
kubectl describe pod -n istio-system -l app=istiod
...
    Requests:
      cpu:      10m
      memory:   100Mi
...

kubectl resource-capacity -n istio-system -u -l app=istiod
NODE                  CPU REQUESTS   CPU LIMITS   CPU UTIL   MEMORY REQUESTS   MEMORY LIMITS   MEMORY UTIL
myk8s-control-plane   10m (0%)       0m (0%)      8m (0%)    100Mi (0%)        0Mi (0%)        90Mi (0%)


# myk8s-control-plane 진입 후 설치 진행
docker exec -it myk8s-control-plane bash
-----------------------------------
# demo 프로파일 컨트롤 플레인 배포 시 적용
istioctl install --set profile=demo \
--set values.pilot.resources.requests.cpu=1000m \
--set values.pilot.resources.requests.memory=1Gi \
--set values.pilot.replicaCount=2 -y

exit
-----------------------------------

#
kubectl get pod -n istio-system -l app=istiod
NAME                      READY   STATUS    RESTARTS   AGE
istiod-5485dd8c48-2cnsz   1/1     Running   0          40s
istiod-5485dd8c48-98545   1/1     Running   0          40s

kubectl resource-capacity -n istio-system -u -l app=istiod
NODE                  CPU REQUESTS   CPU LIMITS   CPU UTIL   MEMORY REQUESTS   MEMORY LIMITS   MEMORY UTIL
myk8s-control-plane   2000m (20%)    0m (0%)      4m (0%)    2048Mi (17%)      0Mi (0%)        114Mi (0%)

kubectl describe pod -n istio-system -l app=istiod
...
    Requests:
      cpu:      1
      memory:   1Gi
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c238037a841d69b1cbc446c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380c59cbbef5673c637c6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인 성능 최적화의 요점&lt;/span&gt;은 다음과 같다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380de8c76c268ba0bb860&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;항상 워크로드에 사이드카 설정을 정의하자. 이것만으로도 대부분의 이점을 얻을 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a9beeae17b8083f692&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인이 포화 상태인데 이미 리소스를 많이 할당한 경우에만 이벤트 배치를 수정하자.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23809eb214dd4890f7a5ad&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;병목이 송신 트래픽일 때 istiod 스케일 아웃하자.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23803685f4c5ea6b6df38d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;병목이 수신 트래픽일 때 istiod 스케일 업하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c23809b99a0f7874a90271c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380229837de7952aa1007&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istiod 디플로이먼트 오토스케일링&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Autoscaling istiod deployment&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380a1afb2fccb6460d47e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;오토스케일링은 일반적으로 리소스 소모를 최적화할 수 있는 좋은 아이디어다. 이스티오 컨트롤 플레인과 같이 부하가 급증할 수 있는 워크로드의 경우에는 특히 그렇다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380198280cd9015dc3920&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 현재로서는 istiod에 효과적이지 않은데, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;isiotd가 워크로드와 30분 커넥션을 시작하기 때문이다???. 이 커넥션은 ADS로 프록시를 설정하고 업데이트하는 데 사용하는 것이다.&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; But as of now, this isn&amp;rsquo;t effective for &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; because it &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;initiates&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; a &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;30-minute connection with the workloads&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, which is used to configure and update the proxies using the Aggregated Discovery Service (&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ADS&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;).&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380729ce4f2c080139049&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;i&gt;(참고) MaxServerConnectionAge by GPT - &lt;/i&gt;&lt;i&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/istio/istio/issues/50968&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Github&lt;/a&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380b4aa8ee18597f9bc8e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380e69b6edac1df209be3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서 새로이 생성된 istiod 복제본은 서비스 프록시와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;종전 파일럿 사이의 커넥션이 만료될 때까지는 아무런 부하를 받지 않는다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380dcadc5ebdbf79c13d9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아무런 부하를 받지 않으니 새 istiod 복제본은 축소된다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c2380cb8f94ec41871621b2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이론 인해 아래 그림과 같이 디플로이먼트가 반복적으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;확장됐다가 축소&lt;/span&gt;되는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;퍼덕거림&lt;/span&gt;(&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;flapping&lt;/span&gt;)이 일어나게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1f6b8b2c1c2380abac28cd8c6e89cef1&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/9e000e8b-99e0-4a06-9956-fe32ce43f317/CleanShot_2025-05-11_at_18.54.36.png?table=block&amp;amp;id=1f6b8b2c-1c23-80ab-ac28-cd8c6e89cef1&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1747526400000&amp;amp;signature=aBq5y_IluMfYFLH_ted9mBFp4wcYguILT1cAzpHm838&quot; alt=&quot;image&quot; width=&quot;445.96588134765625&quot; height=&quot;254.98049269877205&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1f6b8b2c1c23808c87f5d358cc477dd5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1f6b8b2c1c23804bb35fdceb159e5c07&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;현재로서 오토스케일링을 구성하는 가장 좋은 방법은 점진적인 부하 증가에 맞추는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c23805a95a7ed047d454788&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;며칠, 몇주, 심지어는 몇 달 단위에 걸쳐서 말이다.&lt;/li&gt;
&lt;li id=&quot;block-1f6b8b2c1c238060a872d682ea43aaf7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이렇게 하면 성능을 지속적으로 모니터링하고 디폴리어먼트 스케일링 결정을 내려야 하는 인적 자원의 부담을 줄일 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Kubernetes</category>
      <author>ManMan</author>
      <guid isPermaLink="true">https://gylee815.tistory.com/35</guid>
      <comments>https://gylee815.tistory.com/35#entry35comment</comments>
      <pubDate>Sun, 18 May 2025 02:58:16 +0900</pubDate>
    </item>
    <item>
      <title>[IHOS 1기] 5주차 - 마이크로서비스 통신 보안</title>
      <link>https://gylee815.tistory.com/34</link>
      <description>&lt;p id=&quot;block-1efb8b2c1c2380ddbb21e905197dfc8f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;9.0. 실습 환경 구성&lt;/p&gt;
&lt;div id=&quot;block-1efb8b2c1c23802c8501ea74690e0d4f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.0.1. [실습 환경 구성] &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;k8s(1.23.17) 배포&lt;/span&gt; : NodePort(&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;30000&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;30005&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTPS&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1efb8b2c1c238034a0b7d1007c09944d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
git clone https://github.com/AcornPublishing/istio-in-action
cd istio-in-action/book-source-code-master
pwd # 각자 자신의 pwd 경로
code .

# 아래 extramounts 생략 시, myk8s-control-plane 컨테이너 sh/bash 진입 후 직접 git clone 가능
kind create cluster --name myk8s --image kindest/node:v1.23.17 --config - &amp;lt;&amp;lt;EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000 # Sample Application (istio-ingrssgateway) HTTP
    hostPort: 30000
  - containerPort: 30001 # Prometheus
    hostPort: 30001
  - containerPort: 30002 # Grafana
    hostPort: 30002
  - containerPort: 30003 # Kiali
    hostPort: 30003
  - containerPort: 30004 # Tracing
    hostPort: 30004
  - containerPort: 30005 # Sample Application (istio-ingrssgateway) HTTPS
    hostPort: 30005
  - containerPort: 30006 # TCP Route
    hostPort: 30006
  - containerPort: 30007 # kube-ops-view
    hostPort: 30007
  extraMounts: # 해당 부분 생략 가능
  - hostPath: /Users/gasida/Downloads/istio-in-action/book-source-code-master # 각자 자신의 pwd 경로로 설정
    containerPath: /istiobook
networking:
  podSubnet: 10.10.0.0/16
  serviceSubnet: 10.200.1.0/24
EOF

# 설치 확인
docker ps

# 노드에 기본 툴 설치
docker exec -it myk8s-control-plane sh -c 'apt update &amp;amp;&amp;amp; apt install tree psmisc lsof wget bridge-utils net-tools dnsutils tcpdump ngrep iputils-ping git vim -y'

# (옵션) kube-ops-view
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30007 --set env.TZ=&quot;Asia/Seoul&quot; --namespace kube-system
kubectl get deploy,pod,svc,ep -n kube-system -l app.kubernetes.io/instance=kube-ops-view

## kube-ops-view 접속 URL 확인
open &quot;http://localhost:30007/#scale=1.5&quot;
open &quot;http://localhost:30007/#scale=1.3&quot;

# (옵션) metrics-server
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm install metrics-server metrics-server/metrics-server --set 'args[0]=--kubelet-insecure-tls' -n kube-system
kubectl get all -n kube-system -l app.kubernetes.io/instance=metrics-server
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d5b4b3c7a42301298a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23804390f3f787298c4345&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.0.2. [실습 환경 구성] &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio 1.17.8 설치&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/setup/install/istioctl/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Install&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/setup/additional-setup/config-profiles/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;prof&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1efb8b2c1c238042bf47dec10219d5a6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# myk8s-control-plane 진입 후 설치 진행
docker exec -it myk8s-control-plane bash
-----------------------------------
# (옵션) 코드 파일들 마운트 확인
tree /istiobook/ -L 1
혹은
git clone ... /istiobook

# istioctl 설치
export ISTIOV=1.17.8
echo 'export ISTIOV=1.17.8' &amp;gt;&amp;gt; /root/.bashrc

curl -s -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIOV sh -
cp istio-$ISTIOV/bin/istioctl /usr/local/bin/istioctl
istioctl version --remote=false

# demo 프로파일 컨트롤 플레인 배포
istioctl install --set profile=demo --set values.global.proxy.privileged=true -y

# 보조 도구 설치
kubectl apply -f istio-$ISTIOV/samples/addons

# 빠져나오기
exit
-----------------------------------

# 설치 확인 : istiod, istio-ingressgateway, crd 등
kubectl get istiooperators -n istio-system -o yaml
kubectl get all,svc,ep,sa,cm,secret,pdb -n istio-system
kubectl get cm -n istio-system istio -o yaml
kubectl get crd | grep istio.io | sort

# 실습을 위한 네임스페이스 설정
kubectl create ns istioinaction
kubectl label namespace istioinaction istio-injection=enabled
kubectl get ns --show-labels

# istio-ingressgateway 서비스 : NodePort 변경 및 nodeport 지정 변경 , externalTrafficPolicy 설정 (ClientIP 수집)
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 8080, &quot;nodePort&quot;: 30000}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 443, &quot;targetPort&quot;: 8443, &quot;nodePort&quot;: 30005}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;:{&quot;externalTrafficPolicy&quot;: &quot;Local&quot;}}'
kubectl describe svc -n istio-system istio-ingressgateway

# NodePort 변경 및 nodeport 30001~30003으로 변경 : prometheus(30001), grafana(30002), kiali(30003), tracing(30004)
kubectl patch svc -n istio-system prometheus -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 9090, &quot;targetPort&quot;: 9090, &quot;nodePort&quot;: 30001}]}}'
kubectl patch svc -n istio-system grafana -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 3000, &quot;targetPort&quot;: 3000, &quot;nodePort&quot;: 30002}]}}'
kubectl patch svc -n istio-system kiali -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 20001, &quot;targetPort&quot;: 20001, &quot;nodePort&quot;: 30003}]}}'
kubectl patch svc -n istio-system tracing -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 16686, &quot;nodePort&quot;: 30004}]}}'

# Prometheus 접속 : envoy, istio 메트릭 확인
open http://127.0.0.1:30001

# Grafana 접속
open http://127.0.0.1:30002

# Kiali 접속 1 : NodePort
open http://127.0.0.1:30003

# (옵션) Kiali 접속 2 : Port forward
kubectl port-forward deployment/kiali -n istio-system 20001:20001 &amp;amp;
open http://127.0.0.1:20001

# tracing 접속 : 예거 트레이싱 대시보드
open http://127.0.0.1:30004
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380c1b448e8eaaec3f736&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23807aa6d7d6582ce66ff1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;9.1. 애플리케이션 네트워크 보안의 필요성&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1efb8b2c1c23809db307d9f4cd05c005&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;참고: &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://netpple.github.io/docs/istio-in-action/Istio-ch9-securing-1-overview&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://netpple.github.io/docs/istio-in-action/Istio-ch9-securing-1-overview&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d2b87cd0d845072ed9&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : 인증, 인가, 전송 중 데이터 암호화&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23800da157e3ddde8bea99&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션 보안&lt;/span&gt;이란, 인가 받지 않은 사용자가 오염시키거나 훔치거나 접근해서는 안 되는 귀중한 애플리케이션 데이터를 보호하는 데 기여하는 모든 행동을 말한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380048153caf37c5d7550&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사용자 데이터를 지키려면 다음 사항이 필요하다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23804593b2c6984329e5fe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;리소스 접근을 허가하기 전에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;사용자 인증 및 인가&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f2b609f4cd7bd5313e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;데이터를 요청한 클라이언트로 가면서 여러 네트워크 장치를 거쳐가는 동안 데이터 도청을 방지하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;전송 중 데이터 암호화&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380e7a526cf584c47b055&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1578.66px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1efb8b2c1c23803489dae21e3759f8e8&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증&lt;/span&gt;(authentication)이란 클라이언트나 서버가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자신의 정체를 입증&lt;/span&gt;하는 절차를 말하며, 아는 것(패스워드)이나 갖고 있는 것(장치, 인증서) 또는 자기 자신(지문 같은 고유 특성)을 이용한다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가&lt;/span&gt;(authorization)란 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이미 인증된 사용자&lt;/span&gt;가 리소스의 생성이나 조회, 갱신, 삭제 같은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;작업을 수행하는 것을 허용하거나 거부&lt;/span&gt;하는 절차를 말한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380368b56c51de6cb09bf&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380c6923bfd1628023009&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.1.1 서비스 간 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;인증&lt;/u&gt;&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Service-to-service authentication&lt;/span&gt;&lt;/span&gt; - SPIFFE 프레임워크&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380cb9395c03f2d169046&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;안전하려면, 서비스는 자신이 상호작용하는 서비스는 모두 인증해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23803ba9a8def20641d1ec&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다시 말해, 확인할 수 있는 ID 문서를 제시한 후에만 다른 서비스를 신뢰해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23808986fee91ca706eebd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;보통, 이 문서는 그 문서를 발급한 신뢰할 수 있는 제3자에게 획인한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380658a80dc96e33484fc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 장에서는 이스티오가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SPIFFE&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;S&lt;/span&gt;ecure &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;P&lt;/span&gt;rduction &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;I&lt;/span&gt;dentity &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;F&lt;/span&gt;ramework &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;F&lt;/span&gt;or &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;E&lt;/span&gt;veryone 프레임워크를 사용해 서비스들의 ID 발급을 자동화하는 방법을 다룬다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ab966dff42e769487b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Universal identity control plane for distributed systems &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://spiffe.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://spiffe.io/&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380018b16da25915ec8df&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SPIFFE&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; and &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SPIRE&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; provide strongly attested, cryptographic identities to workloads across a wide variety of platforms&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d491d6e79220bf0f1b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SPIFFE&lt;/span&gt; is a set of open-source specifications for a &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;framework&lt;/span&gt; capable of bootstrapping and issuing &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;identity&lt;/span&gt; to services across heterogeneous environments and organizational boundaries. The heart of these specifications is the one that defines &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;short lived cryptographic identity documents&lt;/span&gt; &amp;ndash; called&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://spiffe.io/docs/latest/spiffe/concepts/#spiffe-verifiable-identity-document-svid&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;SVIDs&lt;/a&gt;&lt;/span&gt;&amp;nbsp;via a&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://spiffe.io/docs/latest/spiffe/concepts/#spiffe-workload-api&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;simple API&lt;/a&gt;&lt;/span&gt;. Workloads can then use these identity documents when authenticating to other workloads, for example by establishing a TLS connection or by signing and verifying a JWT token.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380948967cedc93720ac3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://spiffe.io/docs/latest/spiffe-about/overview/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://spiffe.io/docs/latest/spiffe-about/overview/&lt;/a&gt;&lt;/i&gt;&lt;i&gt;* &amp;rarr; &lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Implements 확인&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c238085a3c0ef46a3bcede8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;발급된 ID는 서비스들이 서로 인증하는 데 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238005a0b6ec3c189eaf5d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238019ba98dd76987b0b43&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.1.2 최종 사용자 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;인증&lt;/u&gt;&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;End-user authentication&lt;/span&gt;&lt;/span&gt; - JWT 등 자격증명&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238078ad97d201bcdb1b32&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;최종 사용자 인증은 사용자의 개인 데이터를 저장하는 애플리케이션의 핵심이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238056aab0e0ce48fd4ea8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;성숙한 최종 사용자 인증 프로토콜은 여러 가지가 있지만, 대부분은 사용자를 인증 서버로 리다이렉션하는 것이 핵심이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23807fa565c2c4b8cc7c63&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사용자가 인증 서버에서 로그인을 성공하면 사용자 정보를 담고 있는 자격 증명(HTTP 쿠키나 JWT 등으로 저장)을 받는다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380908df5f232c249cccd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사용자는 인증을 위해 이 자격 증명을 서비스에 제시한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f584bffbb7e8977aa0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스는 어떤 종류든 접근을 허용하기 전에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자격 증명을 발급한 인증 서버에 자격 증명을 검증&lt;/span&gt;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380baa571c08c3e35ebae&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d9b3d2f5ef01ccc3e4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.1.3 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;인가&lt;/u&gt;&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Authorization&lt;/span&gt;&lt;/span&gt; - 작업 수행 승인/거부&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ab8da5f3a6dd8e70c6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인가는 호출자가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증된 후&lt;/span&gt; 진행된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23807f8e66c1eaa24386f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;호출자가 &amp;lsquo;누구&amp;rsquo;인지 서버가 식별하고 나면, 서버는 이 ID가 &amp;lsquo;어떤&amp;rsquo; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;작업&lt;/span&gt;을 수행할 수 있도록 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;허용&lt;/span&gt;돼 있는지 확인하고 그에 따라 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;승인&lt;/span&gt;하거나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;거부&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238009962ce89df92c5233&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 웹 애플리케이션에서 인가는 사용자가 리소스를 생성, 조회, 업데이트, 삭제할 수 있는지 여부를 확인하는 형식을 취한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f8ba9edb4ccfbff57c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 서비스 인증과 ID 모델을 기반으로 서비스 사이에 또는 최종 사용자와 서비스 사이에 세분화된 인가 기능을 제공한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23806cbc6bedc4bc41f1b2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238087bb77cc3867ad9559&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.1.4 모놀리스와 마이크로서비스의 보안 비교&lt;/span&gt; Comparison of security in &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;monoliths&lt;/span&gt; and &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;microservices&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23806ab3c6ebffe41d4a02&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마이크로서비스와 모놀리스 모두 최종 사용자 및 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스&lt;/span&gt; 간 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증&lt;/span&gt;과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가&lt;/span&gt;를 구현해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380629bdcd139f3575f78&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 마이크로서비스에는 보호해야 하는, 네트워크를 오가는 커넥션과 요청이 훨씬 더 많다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ed885eee0c31b5865e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;반면 모놀리스는 커넥션이 더 적고, 보통은 가상머신 혹은 물리 머신 같은 더 정적인 인프라에서 실행된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238072b84cfd6082cbfb5a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;정적인 인프라&lt;/span&gt;에서 실행하면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(고정) IP 주소&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ID 확인 근거&lt;/span&gt;로 심기 좋으며, 덕분에 인증용 인증서에서 흔하게 사용한다. (네트워크 방화벽 규칙에도 사용한다)&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23808f8de5e20821ff361f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 9.1은 IP를 신뢰의 근거로 삼기 좋은 정적 인프라를 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23801e9b9aeb3c5f501681&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/37213704-2176-4ff9-8d40-e776245d3562/CleanShot_2025-05-01_at_15.01.58.png?table=block&amp;amp;id=1efb8b2c-1c23-801e-9b9a-eb3c5f501681&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=l3IB-Do3f32VawIAkGAm0jJAqgQYjUIZB_eUyVaHq9o&quot; alt=&quot;고정IP로 온프레미스에서 실행되는 모놀리스 애플리케이션&quot; width=&quot;624&quot; height=&quot;530.9724770642201&quot; /&gt;고정IP로 온프레미스에서 실행되는 모놀리스 애플리케이션&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d8b905f4febef70412&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23809e9873dda10e75e1fc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;반면에 마이크로서비스는 쉽게 수백, 수천 개의 서비스로 불어나므로 정적 환경에서는 서비스를 운영할 수 없다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c6b42acdde4c8030f8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 이유로 클라우드 컴퓨팅이나 컨테이너 오케스트레이션 같은 동적 환경을 활용하는데, 여기서 서비스는 수많은 서버로 스케줄링되고 수명이 짧다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380cd9b87eea537e1e1ef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; IP 주소&lt;/span&gt;&lt;/span&gt;를 사용하는 것 같은 &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;전통적인 방법들은 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ID의 근거로 미덥지 못하게 된다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e08f06c80c8b9766d8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;설상가상으로 서비스가 반드시 같은 네트워크에서 실행되는 것도 아니며, 여러 클라우드 프로바이더에 걸쳐 있거나 심지어는 그림 9.2처럼 온프레미스에서도 실행 될 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380e5b0e1c6d109898bca&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/363287bf-6e04-436a-a168-2d2824dad654/CleanShot_2025-05-01_at_15.07.22.png?table=block&amp;amp;id=1efb8b2c-1c23-80e5-b0e1-c6d109898bca&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=e2ulweyho4yVFCxi4HLse8N3tbY_Oi8YL2aeGmgfZtQ&quot; alt=&quot;클라우드와 온프레미스에서 실행되는 상호 연결이 많은 마이크로서비스&quot; width=&quot;768&quot; height=&quot;435.01449275362313&quot; /&gt;클라우드와 온프레미스에서 실행되는 상호 연결이 많은 마이크로서비스&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23807cadfaeb861f6cdbfe&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238022945ffb0c9624dd05&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 문제를 해결해 고도로 동적이고 이질적인 환경에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ID&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;제공&lt;/span&gt;하고자 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SPIFFE&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;specification&lt;/span&gt; 사양을 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e4bb0cfb10294cc87d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SPIFFE&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;는 고도로 동적이고 이질적인 환경에서 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드에 ID를 제공&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;하기 위한 일렬의 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;오픈소스 표준&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;이다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ada81fdf178476086b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SPIFFE&lt;/span&gt; 처리에 대한 더 자세한 내용과 함께 이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SPIFFE&lt;/span&gt;가 이스티오의 ID 추정을 뒷받침하는 방법을 보려면 부록 C를 참조하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238047acc5ec5d6b2fd42e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d8b5a5e20555a7668a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.1.5 이스티오가 SPIFFE를 구현하는 방법&lt;/span&gt; How Istio implements SPIFFE - &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;SVID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c8b153f47954df1f42&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;SPIFFE ID는 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://datatracker.ietf.org/doc/html/rfc3986&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;RFC 3986&lt;/a&gt; 호환 URI로, &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;spiffe://trust-domain/path&lt;/code&gt; 형식으로 구성된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238055bfe5f64b88dbaecf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서는 다음과 같다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380aebb60e2cfd40fbb04&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;trust-domain 은 개인 또는 조직 같은 ID 발급자를 나타낸다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238054979fe51944a81d87&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;path는 trust-domain 내에서 워크로드를 유일하게 식별한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380618837d021e748d930&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c23806b860bc4834e5342c6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;path가 워크로드를 식별하는 자세한 방법은 정해져 있지 않아서 SPIFFE 명세 구현자가 결정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380998940c4bd2ab5419b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오에서는 이 path를 특정 워크로드가 사용하는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 서비스 어카운트&lt;/span&gt;로 채운다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23808ca207ed666785bc70&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SPIFFE ID&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SVID &lt;/span&gt;(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;S&lt;/span&gt;piffe &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;V&lt;/span&gt;erifiable &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;I&lt;/span&gt;dentity &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;D&lt;/span&gt;ocument, SPIFFE 검증할 수 있는 ID 문서) 라고도 하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;X.509 인증서&lt;/span&gt;로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인코딩&lt;/span&gt;되며, 이는 이스티오의 컨트롤 플레인이 워크로드마다 만들어낸다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23807489b5f8a44f7613bb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그런 다음, 이 인증서는 전송 데이터를 암호화함으로써 서비스 간 통신의 전송을 보호하는데 사용된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380cb94f6ec654ef8d37d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다시 말하지만, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;부록 C&lt;/span&gt;에서 이 모든 작업이 어떻게 작동하는지를 휠씬 자세히 다룬다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23809ab63bfd5ba174bfcb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 장에서는 이스티오의 기능으로 보안 태세를 개선하는 데 초점을 맞춘다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23809987a4eda7604fa094&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d7a3e0feb20b8c0fdb&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.1.6 이스티오 보안 요약&lt;/span&gt; Istio security in a nutshell - &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;PeerAuthentication , RequestAuthentication , AuthorizationPolicy&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238056aa90f784ef92cdf8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 보안을 이해하기 위해 이스티오가 정의한 커스텀 리소스로 프록시를 설정하는 서비스 메시 운영자의 관점으로 바꿔보자.
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23805e8bc7d05589a6fe14&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인증에 성공하면, 프록시는 상대 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;peer&lt;/span&gt;의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증서에 인코딩된 정보를 추출해 요청 인가에 사용&lt;/span&gt;할 수 있도록 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238025a465ecbb40c21b6a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인증에 성공하면, 역시 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자격 증명에 인코딩된 정보를 추출해 요청 인가에 사용할&lt;/span&gt; 수 있도록 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380929e1ff0873109b804&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PeerAuthentication&lt;/span&gt; 리소스는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 서비스 간의 트래픽을 인증&lt;/span&gt;하도록 프록시를 설정한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The PeerAuthentication resource configures the proxy to authenticate service-to-service traffic.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380949404eb6f7be4dc18&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RequestAuthentication&lt;/span&gt; 리소스는 프록시가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;최종 사용자의 자격 증명을 발급 서버에 확인해 인증&lt;/span&gt;하도록 설정한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; The RequestAuthentication resource configures the proxy to authenticate end-user credentials against the servers that issued them.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238097a00def244bde9072&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AuthorizationPolicy&lt;/span&gt; 리소스는 앞선 두 리소스에 따라 추출한 정보를 토대로 프록시가 요청을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가&lt;/span&gt;하거나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;거부&lt;/span&gt;하도록 구성한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The AuthorizationPolicy resource configures the proxy to authorize or reject requests by making decisions based on the data extracted by the previous two resources.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23804794a7d7057d00c58d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/614f2085-f5cd-4bdc-b424-a6db09660c74/CleanShot_2025-05-04_at_18.12.52.png?table=block&amp;amp;id=1efb8b2c-1c23-8047-94a7-d7057d00c58d&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=aJC2PbQR7g9QYIbwPK8sIALxGIRUauJtc9DVrhEnsls&quot; alt=&quot;부록 C.6 필터 메타데이터에서 검증된 데이터 수집&quot; width=&quot;696.960205078125&quot; height=&quot;329.9811587887823&quot; /&gt;부록 C.6 필터 메타데이터에서 검증된 데이터 수집&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380fb952ff08ddaf9cceb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c2380afb3b0fc28f9ff0ac7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 9.3은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PeerAuthentication&lt;/span&gt; 과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RequestAuthentication&lt;/span&gt; 리소스가 어떻게 요청을 인증하도록 프록시를 구성하는지, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자격 증명&lt;/span&gt;(SVID나 JWT)에 인코딩된 정보가 어느 시점에 추출돼 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터 메타데이터로 저장&lt;/span&gt;되는지를 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23801eafc9cb8f55823789&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터 메타데이터&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;커넥션 ID&lt;/span&gt;를 나타낸다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The filter metadata represents the connection identity.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23803b9124f69d20510cce&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AuthorizationPolicy&lt;/span&gt; 리소스는 그 커넥션 ID에 기반해 요청을 허가할지 거부할지를 결정한다.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380e2b7c5dec486dd70d7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/f2610f54-fcef-45c2-add0-b3e302597718/CleanShot_2025-05-01_at_15.31.03.png?table=block&amp;amp;id=1efb8b2c-1c23-80e2-b7c5-dec486dd70d7&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=oi4eiTzKuE3LRug7hO34f15sChaNut5qbLe7GVwDrNU&quot; alt=&quot;요청을 인증 및 인가하도록 서비스 프록시를 구성하는 리소스&quot; width=&quot;864&quot; height=&quot;651.5409836065573&quot; /&gt;요청을 인증 및 인가하도록 서비스 프록시를 구성하는 리소스&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f5b119f4fb36fa8cc9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;PeerAuthentication&lt;/code&gt;&lt;/i&gt;&amp;nbsp;: 서비스-to-&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스&lt;/span&gt; 인증 설정, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가&lt;/span&gt;를 위한 피어 정보 추출&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c880a1f37641809bc7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;RequestAuthentication&lt;/code&gt;&lt;/i&gt;&amp;nbsp;: End-&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;user&lt;/span&gt; 인증 설정, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가&lt;/span&gt;를 위한 유저 정보 추출&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238070854ae89b9b6d7dd1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;AuthorizationPolicy&lt;/code&gt;&lt;/i&gt;&amp;nbsp;:&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;PeerAuthentication&lt;/code&gt;,&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;RequestAuthentication&lt;/code&gt;&amp;nbsp;에서 추출한 피어/유저 정보에 기초하여 권한 판단을 위한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가&lt;/span&gt; 정책을 설정&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238074a83fe4fd5b529b65&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23800cb612e3211970d261&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio Security Architecture&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1efb8b2c1c2380a0b00fd11f34e0418d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/57d06b5d-3aa2-46d7-9ae1-72c48e35d716/CleanShot_2025-05-05_at_00.10.122x.png?table=block&amp;amp;id=1efb8b2c-1c23-80a0-b00f-d11f34e0418d&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=9glCXnXlXpI-GmazNOFUkGYFcuzF_1jNcPkIs8Vod-4&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;610.569014084507&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b29e2dc3fd8c602ddb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;The &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio CA&lt;/span&gt; manages &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;keys&lt;/span&gt; and &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;certificates&lt;/span&gt; and the SANs in certificates are in SPIFFE format.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380788b15ff2f8aed8af8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istiod&lt;/span&gt; distributes &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;authentication&lt;/span&gt; and &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;authorization&lt;/span&gt; security policies to &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;all sidecars&lt;/span&gt; in the &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;mesh&lt;/span&gt;.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23804288c9c820e6903472&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Sidecars&lt;/span&gt; enforce authentication and authorization&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; as per security policies distributed&lt;/span&gt; by Istiod&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23807fb15ae17b4c207dc2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1efb8b2c1c238065ab1bd58b061ba239&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.2. 자동 상호 TLS (Auto mTLS)&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1efb8b2c1c238006b7e1f2349c6dddb9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://netpple.github.io/docs/istio-in-action/Istio-ch9-securing-2-auto_mTLS&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://netpple.github.io/docs/istio-in-action/Istio-ch9-securing-2-auto_mTLS&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1efb8b2c1c23805c80faeb641ba03861&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : 인증서 발급/갱신 자동화, 추가 작업(인증, 인가)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23809dafaae4c5148ab736&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사이트가 프록시가 주입된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 사이의 트래픽은&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본적&lt;/span&gt;으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;암호화&lt;/span&gt;되고 서로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380eb9910c97abb24da74&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증서를 발급하고 로테이션하는 절차를 자동화&lt;/span&gt;하는 것은 매우 중요한데, 역사적으로 사람이 관리할 때 오류가 발생하기 쉬웠기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380789f66e07f26058048&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이로 인해 불필요하고 비용이 많이 드는 서비스 중단이 발생했는데, 이스티오에서 구현한 것처럼 절차를 자동화했다면 피할 수 있었을 문제였다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23802cb994ef138e6e1988&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23805198c2dcfa8406f2f5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 9.4는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인에서 발급한 인증서를 사용해 서비스들이 서로 인증하고 트래픽을 암호화하는 방식&lt;/span&gt;을 나타낸다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23801faf9bea92d2735641&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 방식을 통해 기본적으로 안전한 상태를 유지한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380eabc3dcd6a748d4ccd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사실 &amp;lsquo;기본적으로 안전한&amp;rsquo;이라고 하면 기본적으로는 대부분 안전하다는 의미로, 메시를 더 안전하게 만들기 위해서는 아직 우리가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;수행해야 할 작업&lt;/span&gt;들이 남아 있다.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238024ac99d8f309b0d0f4&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/d52aed62-62e2-4f08-9530-df4023fdd2a6/CleanShot_2025-05-01_at_16.37.54.png?table=block&amp;amp;id=1efb8b2c-1c23-8024-ac99-d8f309b0d0f4&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=E6_MD4NSwm-6EOZq0XcaLoa-tz81ZgiiDS_cUT4v5Dc&quot; alt=&quot;image&quot; width=&quot;405.96588134765625&quot; height=&quot;399.96638556419333&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380049392de9eb569545e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드는 이스티오 인증 기관에서 발급한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SVID 인증서&lt;/span&gt;를 사용해 서로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증&lt;/span&gt;한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380c78de8c20590ceaa27&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-1efb8b2c1c2380cc8a8dcc268fb19e8d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;먼저, 서비스 메시가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서로 인증한 트래픽만 허용하도록 설정&lt;/span&gt;해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238071aa79dc83c7dc30e4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;왜 이것이 설치할 때 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본값이 아닌지&lt;/span&gt; 궁금할 수 있다. 이는 메시 채택을 용이하게 하려는 설계 결정이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380369fddd9b6bc3969d9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여러 팀이 자체 서비스를 관리하는 거대 엔터프라이즈에서는 모든 서비스를 메시로 옮기기까지 몇 달 혹은 몇 년에 걸치 조직적인 노력이 필요할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238052a711ed8f47062eb2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238090b9cfd8e6abda5308&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;두 번째로, 서비스를 인증하면&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 최소 권한 원칙&lt;/span&gt;을 준수할 수 있고, 각 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스에 정책&lt;/span&gt;을 만들 수 있으며, 기능에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필요한 최소한의 접근만 허용&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238071871cd7541c721d1d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 아주 중요한데, 서비스의 ID를 나타내는 인증서가 잘못된 사람에게 넘어갔을 때 피해 범위를 ID가 접근할 수 있도록 허용된 일부 서비스만으로 좁힐 수 있기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23803583abe8e7b6eacd20&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380699d77ccfb8aacb846&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(기본 정보) TLS vs &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;mTLS&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238011abe7e2402621e123&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;TLS&lt;/code&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://babbab2.tistory.com/4&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;암호화방식&lt;/a&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://babbab2.tistory.com/5?category=960153&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;인증서&lt;/a&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://babbab2.tistory.com/7?category=960153&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Handshake&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23800c868fe0f87e62ac93&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;TLS는 네트워크로 통신을 하는 과정에서 도청, 간섭, 위조를 방지하기 위해서 설계됨. 암호화를 통해 인증, 통신 기밀성을 제공.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380149f31f3b328962e23&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;TLS의 3단계 기본 절차: (1) 지원 가능한 알고리즘 서로 교환 (2) 키 교환, 인증 (3) 대칭키 암호로 암호화하고 메시지 인증&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c238096822ce017d9787e73&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;TLS&lt;/code&gt; vs &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;MTLS&lt;/code&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.cloudflare.com/ko-kr/learning/access-management/what-is-mutual-tls/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크&lt;/a&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.jacobbaek.com/1040&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;소개&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23804f80b5d18f5dbe86c3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;MTLS 절차&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서버측&lt;/span&gt;도 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라이언트측&lt;/span&gt;에 대한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증서&lt;/span&gt;를 확인 및 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;액세스 권한 &lt;/span&gt;확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23804ea922e78533cb79ab&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://blog.cloudflare.com/protecting-the-origin-with-tls-authenticated-origin-pulls/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F0366a73d-52d9-4608-8eed-eeede463b97f%2FUntitled.png?id=1efb8b2c-1c23-804e-a922-e78533cb79ab&amp;amp;table=block&quot; alt=&quot;https://blog.cloudflare.com/protecting-the-origin-with-tls-authenticated-origin-pulls/&quot; width=&quot;576&quot; height=&quot;803.84&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238079855ddbe58a1f78fd&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380ea91fac0f6a9b47377&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;9.2.1 환경 설정하기 &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습~)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23804a8c1ef4696f5b59b2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;mTLS 기능 실습을 위해 3가지 서비스를 준비.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ab9ed1ec43d162ea04&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;sleep 서비스를 추가 : 레거시 워크로드로, 사이드카 프록시가 없어서 상호 인증을 할 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380c58897c18585734d24&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/09469086-5ec8-404c-b648-71db4be45996/CleanShot_2025-05-01_at_16.49.42.png?table=block&amp;amp;id=1efb8b2c-1c23-80c5-8897-c18585734d24&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=bPiFOojHaBLFfm7kV-Lms1Wn8AV-ilizw8c30tdisZQ&quot; alt=&quot;image&quot; width=&quot;646.9885864257812&quot; height=&quot;200.99645420646374&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23808b9221ee84e0dbc786&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380949275ef7087553219&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습 환경 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d8b3c7f8a9cbe8b463&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# catalog와 webapp 배포
kubectl apply -f services/catalog/kubernetes/catalog.yaml -n istioinaction
kubectl apply -f services/webapp/kubernetes/webapp.yaml -n istioinaction

# webapp과 catalog의 gateway, virtualservice 설정
kubectl apply -f services/webapp/istio/webapp-catalog-gw-vs.yaml -n istioinaction

# default 네임스페이스에 sleep 앱 배포
cat ch9/sleep.yaml
...
    spec:
      serviceAccountName: sleep
      containers:
      - name: sleep
        image: governmentpaas/curl-ssl
        command: [&quot;/bin/sleep&quot;, &quot;3650d&quot;]
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - mountPath: /etc/sleep/tls
          name: secret-volume
      volumes:
      - name: secret-volume
        secret:
          secretName: sleep-secret
          optional: true

kubectl apply -f ch9/sleep.yaml -n default

# 확인
kubectl get deploy,pod,sa,svc,ep
kubectl get deploy,svc -n istioinaction

kubectl get gw,vs -n istioinaction
NAME                                            AGE
gateway.networking.istio.io/coolstore-gateway   24s

NAME                                                       GATEWAYS                HOSTS                         AGE
virtualservice.networking.istio.io/webapp-virtualservice   [&quot;coolstore-gateway&quot;]   [&quot;webapp.istioinaction.io&quot;]   24s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380baa438f83e994873ee&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23802e83cae0e7a56c3a55&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본 통신 확인 : 레거시 sleep 워크로드 &amp;rarr; webapp 워크로드로 평문 요청 실행&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380389bfbc7a44b35ccda&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 요청 실행
kubectl exec deploy/sleep -c sleep -- curl -s webapp.istioinaction/api/catalog -o /dev/null -w &quot;%{http_code}\n&quot;

# 반복 요청
watch 'kubectl exec deploy/sleep -c sleep -- curl -s webapp.istioinaction/api/catalog -o /dev/null -w &quot;%{http_code}\n&quot;'
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23801e9cbbd46d6bc515b9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;키알리 확인&lt;/span&gt; : 네임스페이스(default, istioinaction 선택), Show Legend 클릭 후 아이콘 확인, unkonw &amp;rarr; webapp 구간은 평문 통신&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23803ab614f36e922a2089&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/fe7f57f1-e133-44d2-a82f-bf6731c0de8f/CleanShot_2025-05-01_at_17.01.51.png?table=block&amp;amp;id=1efb8b2c-1c23-803a-b614-f36e922a2089&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=3H_yG89YzJNN52qDgQOzUOd4yu6qajZCtyNj936QnGY&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;426.26086956521743&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380bf92efe1355170cac0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-1efb8b2c1c2380da9d41ee7e18f7c8f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;응답이 성공했다는 것은 서비스들이 올바르게 준비됐으며 webapp 서비스가 sleep 서비스의 평문 요청을 받아들였다는 사실을 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238061a039e5678993fcc3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본적으로 이스티오는 평문 요청을 허용하는데, 이는 모든 워크로드를 메시로 옮길 때까지 서비스 중단을 일으키지 않고 서비스 메시를 점진적으로 채택할 수 있게 하기 위해서다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238047a081e9bc143ab6f8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 PeerAuthentication 리소스로 평문 트래픽을 금지할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ca84eaf5a06d5719f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;위에서 말했듯이, PeerAuthentication은 service-to-service 인증을 위한 resource 이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238021a7d9fa542cfc54f6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c9b5c3e8db2acf807d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.2.2 이스티오의 PeerAuthentication 리소스 이해하기*&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23805c9d90f86ed6f11347&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b3b48de794bd25de57&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;PeerAuthentication&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt; &lt;/span&gt;리소스를 사용하면 워크로드가 mTLS를 엄격하게 요구하거나 평문 트래픽을 허용하고 받아들이게 설정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380efbf23de2ed7ee5e3a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이들 각각은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;STRICT&lt;/span&gt; 혹은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PERMISSIVE&lt;/span&gt; 인증 모드를 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380619766fd0820b3a769&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;상호 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;mutual&lt;/span&gt; 인증 모드는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 다양한 범위&lt;/span&gt;에서 구성할 수 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23803e89efd5dd5deca3d9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mesh-wide&lt;/span&gt; PeerAuthentication 정책은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 메시의 모든 워크로드&lt;/span&gt;에 적용된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380deac63df108b2c2b18&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Namespace-wide &lt;/span&gt;PeerAuthentication 정책은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네임스페이스 내 모든 워크로드&lt;/span&gt;에 적용된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b08593cbaccae85816&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Workload-specific&lt;/span&gt; PeerAuthentication 정책은 정책에서&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 명시한 셀렉터에 부합하는 모든 워크로드&lt;/span&gt;에 적용된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d6be1fd3af963bb29c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380e69771cda80b0b8a5c&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;메시 범위 정책으로 모든 미인증 트래픽 거부하기&lt;/u&gt;&lt;/span&gt; DENYING ALL NON-AUTHENTICATED TRAFFIC USING A &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;MESH-WIDE POLICY&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380759069f26908ee9ea3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메시의 보안을 향상시키기 위해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;STRICT&lt;/span&gt; 상호 인증 모드를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;강제&lt;/span&gt;하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메시 범위 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;MESH-WIDE&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 정책&lt;/span&gt;을 만들어서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;평문 트래픽을 금지&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23802dbb7fcb743f326cd2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메시 범위 PeerAuthentication 정책은 두 가지 조건을 충족해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380708e74ea872acecf62&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;반드시 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오를 설치한 네임스페이스&lt;/span&gt;에 적용해야 하고, 이름은 &amp;lsquo;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;default&lt;/span&gt;&amp;rsquo;여야 한다.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238017a645c54485557a3e&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1490.7px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1efb8b2c1c23806b88aed753fc3fb837&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;메시 범위 리소스의 이름을 &amp;lsquo;default&amp;rsquo;로 짓는 것은 필수가 아닌 일종의 컨벤션(convention)으로, 메시 범위 PeerAuthentication 리소스를 딱 하나만 만들기 위해서다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23807cb827f511c40bb2df&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
cat ch9/meshwide-strict-peer-authn.yaml 
apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;PeerAuthentication&quot;
metadata:
  name: &quot;default&quot; # Mesh-wide policies must be named &quot;default&quot;
  namespace: &quot;istio-system&quot; # Istio installation namespace
spec:
  mtls:
    mode: STRICT # mutual TLS mode

# 적용
kubectl apply -f ch9/meshwide-strict-peer-authn.yaml -n istio-system

# 요청 실행
kubectl exec deploy/sleep -c sleep -- curl -s http://webapp.istioinaction/api/catalog -o /dev/null -w &quot;%{http_code}\n&quot;
000
command terminated with exit code 56

# 확인
kubectl get PeerAuthentication -n istio-system
kubectl logs -n istioinaction -l app=webapp -c webapp -f
kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f
[2025-05-10T08:50:17.972Z] &quot;- - -&quot; 0 NR filter_chain_not_found - &quot;-&quot; 0 0 0 - &quot;-&quot; &quot;-&quot; &quot;-&quot; &quot;-&quot; &quot;-&quot; - - 10.10.0.13:8080 10.10.0.14:55100 - -
[2025-05-10T08:50:20.105Z] &quot;- - -&quot; 0 NR filter_chain_not_found - &quot;-&quot; 0 0 0 - &quot;-&quot; &quot;-&quot; &quot;-&quot; &quot;-&quot; &quot;-&quot; - - 10.10.0.13:8080 10.10.0.14:55104 - -
# NR &amp;rarr; Non-Route. Envoy에서 라우팅까지 가지 못한 단계에서 발생한 에러라는 의미입니다.
# filter_chain_not_found &amp;rarr; 해당 Listener에서 제공된 SNI(Server Name Indication), IP, 포트, ALPN 등의 조건에 맞는 filter_chain이 설정에 없다는 뜻입니다.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ef8dcaea91b74861fe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 평문 요청이 거부됐다는 것을 확인한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380fda75de7f082ca60a4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;상호 인증 요구 사항을 STRICT로 지정하는 것은 좋은 기본값이지만, 진행 중인 프로젝트에서는 그런 급격한 변화가 실현 가능성이 없다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ab8a1fce67300425ae&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드를 옮기려면 여러 팀 간의 협업이 필요하기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c88f6dd5ec90cb1155&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;더 나은 방법은 적용하는 제한을 점진적으로 늘리고, 팀들이 자신의 서비스를 서비스 메시로 옮길 수 있도록 시간을 주는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238050b1a5cee36c8e2bdd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PERMISSIVE&lt;/span&gt; 상호 인증이 딱 그런 역할로, 워크로드가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;암호화된 요청&lt;/span&gt;과&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 평문 요청&lt;/span&gt;을 모두 받아드릴 수 있게 허용한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380a99142e878891bd91d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/f2610f54-fcef-45c2-add0-b3e302597718/CleanShot_2025-05-01_at_15.31.03.png?table=block&amp;amp;id=1efb8b2c-1c23-80e2-b7c5-dec486dd70d7&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=oi4eiTzKuE3LRug7hO34f15sChaNut5qbLe7GVwDrNU&quot; alt=&quot;요청을 인증 및 인가하도록 서비스 프록시를 구성하는 리소스&quot; width=&quot;672&quot; height=&quot;506.7540983606557&quot; /&gt;요청을 인증 및 인가하도록 서비스 프록시를 구성하는 리소스&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380aca320ef9aa55ff0cc&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/d61cbf6a-2c0c-48fa-a4ed-bb4f884acebd/CleanShot_2025-05-01_at_17.37.56.png?table=block&amp;amp;id=1efb8b2c-1c23-80ac-a320-ef9aa55ff0cc&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=4XXG-2b0_O2dcpezpDEx92IhWYm9Z8hZoMr26vW8KzU&quot; alt=&quot;image&quot; width=&quot;687.9545288085938&quot; height=&quot;333.9779253227766&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380c391e7f35b4dd7d14c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23807a83e1c0a318bd185e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;상호 인증하기 않은 트래픽 허용하기&lt;/u&gt;&lt;/span&gt; PERMITTING NON-MUTUALLY AUTHENTICATED TRAFFIC&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380758bbcd3a2ff25f592&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네임스페이스 범위 정책을 사용하면 메시 범위 정책을 덮어 쓸 수 있고, 네임스페이스의 워크로드에 더 잘 맞는 PeerAuthentication 요구 사항을 적용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d79622e023a329bad0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 PeerAuthentication 리소스는 istioinaction 네임스페이스의 워크로드가 sleep 서비스와 같이 메시의 일부가 아닌 레거시 워크로드로부터 평문 트래픽을 받아들이도록 허용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23803f9570fa15d844ced1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;cat &amp;lt;&amp;lt; EOF | kubectl apply -f -
apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;PeerAuthentication&quot;
metadata:
  name: &quot;default&quot;             # Uses the &quot;default&quot; naming convention so that only one namespace-wide resource exists
  namespace: &quot;istioinaction&quot;  # Specifies the namespace to apply the policy
spec:
  mtls:
    mode: PERMISSIVE          # PERMISSIVE allows HTTP traffic.
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238033b0cad8501f501e08&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380b2b6b8c7ab9efe121f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 요청 실행
kubectl exec deploy/sleep -c sleep -- curl -s http://webapp.istioinaction/api/catalog -o /dev/null -w &quot;%{http_code}\n&quot;
200

# 확인
kubectl get PeerAuthentication -A 
NAMESPACE       NAME      MODE         AGE
istio-system    default   STRICT       3m40s
istioinaction   default   PERMISSIVE   22s

kubectl logs -n istioinaction -l app=webapp -c webapp -f

# 정상 200 return 확인
# permissive mode에 의해서 mesh의 일부가 아닌(=istio proxy가 없는) sleep pod의 요청 허용
kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f
[2025-05-10T08:53:53.501Z] &quot;GET /items HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 502 1 1 &quot;-&quot; &quot;beegoServer&quot; &quot;9e0a45af-8057-9b77-83a7-a6c9ada11e23&quot; &quot;catalog.istioinaction:80&quot; &quot;10.10.0.12:3000&quot; outbound|80||catalog.istioinaction.svc.cluster.local 10.10.0.13:44292 10.200.1.181:80 10.10.0.13:35556 - default
[2025-05-10T08:53:53.500Z] &quot;GET /api/catalog HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 357 2 2 &quot;-&quot; &quot;curl/8.5.0&quot; &quot;9e0a45af-8057-9b77-83a7-a6c9ada11e23&quot; &quot;webapp.istioinaction&quot; &quot;10.10.0.13:8080&quot; inbound|8080|| 127.0.0.6:39191 10.10.0.13:8080 10.10.0.14:46398 - default

# 다음 실습을 위해 삭제 : PeerAuthentication 단축어 pa
kubectl delete pa default -n istioinaction
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23806d840cebec5bd9c568&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;좀 더 보안을 신경써보자.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238066898deb57308df98b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;미인증 트래픽은&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; sleep 워크로드에서 webapp으로 향하는 것만 허용&lt;/span&gt;하고,&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; catalog 워크로드에는 STRICT 상호 인증을 계속 유지&lt;/span&gt;하자.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238094b19ee2788dad8480&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이렇게 하면 보안이 뚫렸을 때 공격 표면을 더 좁힐 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23804e949ff50bb8f13b08&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238087bd08f954d9d8235e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;워크로드별 PeerAuthentication 정책 적용하기&lt;/u&gt;&lt;/span&gt; APPLYING &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;WORKLOAD-SPECIFIC &lt;/span&gt;PEERAUTHENTICATION POLICIES&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238064a06ae677099f80a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;webapp 만 목표로 하기 위해 워크로드 셀렉터를 지정해 상술했던 PeerAuthentication 정책을 업데이트 하자.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23807ba828f379225728a6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이로써 셀렉터에 부합하는 워크로드에만 적용될 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f7846ac9f14f7ac10c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 이름을 &amp;lsquo;default&amp;rsquo;에서 webapp으로 바뀌자.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380a1ad4de6274e0349f7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;동작이 바꾸지는 않지만, 네임스페이스 전체에 적용되는 PeerAuthentication 정책만 &amp;lsquo;default&amp;rsquo;로 짓는 컨벤션을 따르려는 것이다.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238009bdfbf5183d8f2d16&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# istiod 는 PeerAuthentication 리소스 생성을 수신하고, 이 리소스를 엔보이용 설정으로 변환하며, 
# LDS(Listener Discovery Service)를 사용해 서비스 프록시에 적용
docker exec -it myk8s-control-plane istioctl proxy-status
kubectl logs -n istio-system -l app=istiod -f
...
2025-05-10T08:59:08.529410Z     info    ads     LDS: PUSH for node:istio-ingressgateway-6bb8fb6549-wq46d.istio-system resources:1 size:3.5kB
2025-05-10T08:59:08.530318Z     info    ads     LDS: PUSH for node:catalog-6cf4b97d-ks9w8.istioinaction resources:22 size:80.9kB
2025-05-10T08:59:08.530321Z     info    ads     LDS: PUSH for node:webapp-7685bcb84-hmdtl.istioinaction resources:22 size:80.9kB
...

#
cat ch9/workload-permissive-peer-authn.yaml
apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;PeerAuthentication&quot;
metadata:
  name: &quot;webapp&quot;
  namespace: &quot;istioinaction&quot;
spec:
  selector:
    matchLabels:
      app: &quot;webapp&quot;  # 레이블이 일치하는 워크로드만 PERMISSIVE로 동작
  mtls:
    mode: PERMISSIVE

kubectl apply -f ch9/workload-permissive-peer-authn.yaml

kubectl get pa -A
NAMESPACE       NAME      MODE         AGE
istio-system    default   STRICT       11m
istioinaction   webapp    PERMISSIVE   4s

# 요청 실행 =&amp;gt; webapp pa가 적용됨(mtls permissive mode) =&amp;gt; http 요청 허용
kubectl exec deploy/sleep -c sleep -- curl -s http://webapp.istioinaction/api/catalog -o /dev/null -w &quot;%{http_code}\n&quot;

kubectl logs -n istioinaction -l app=webapp -c webapp -f
kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f
200

# 요청 실행 =&amp;gt; default pa가 적용됨(mtls strict mode) =&amp;gt; http 요청 거부
kubectl exec deploy/sleep -c sleep -- curl -s http://catalog.istioinaction/api/items -o /dev/null -w &quot;%{http_code}\n&quot;

kubectl logs -n istioinaction -l app=catalog -c catalog -f
kubectl logs -n istioinaction -l app=catalog -c istio-proxy -f
[2025-05-10T09:01:56.346Z] &quot;- - -&quot; 0 NR filter_chain_not_found - &quot;-&quot; 0 0 0 - &quot;-&quot; &quot;-&quot; &quot;-&quot; &quot;-&quot; &quot;-&quot; - - 10.10.0.12:3000 10.10.0.14:42446 - -...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23808c879cec81e66c03af&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;성공 응답을 반환한다! 메시 범위 정책으로 엄격한 기본값을 적용했다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c9a598cf1dc5b24412&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 일부 서비스(뒤처진 것들)에는 그 서비스들이 메시로 옮겨질 때까지 상호 인증이 아닌 트래픽도 허용되도록 워크로드별 정책을 사용한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380f194a3dc1f35e2f4bb&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/ee8a531c-c27c-4886-84b5-4b4ba1acf4c7/CleanShot_2025-05-01_at_18.32.34.png?table=block&amp;amp;id=1efb8b2c-1c23-80f1-94a3-dc1f35e2f4bb&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=4AYLbPAPG9s1HoFPriOl-yoTCJyL9jYMEtpkR8cYTUg&quot; alt=&quot;webapp은 HTTP 트래픽을 받아들인다. catalog 서비스에는 상호 인증이 필요하다.&quot; width=&quot;816&quot; height=&quot;625.1782945736434&quot; /&gt;webapp은 HTTP 트래픽을 받아들인다. catalog 서비스에는 상호 인증이 필요하다.&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238067a717c692dd516e94&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23801ca7e6e928786aad87&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1546.67px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1efb8b2c1c23807fb112dde2f0e61d1e&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt; 는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PeerAuthentication&lt;/span&gt; 리소스 생성을 수신하고, 이 리소스를&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 엔보이용 설정&lt;/span&gt;으로 변환하며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;LDS&lt;/span&gt;(Listener Discovery Service)를 사용해 서비스 프록시에 적용한다. 구성된 정책들은 들어오는 요청마다 평가된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The configured policies are evaluated for every incoming request.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380a09954e40583b9797e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380dc97fee67b66adc348&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;두 가지 추가적인 상호 인증 모드&lt;/u&gt;&lt;/span&gt; TWO ADDITIONAL MUTUAL AUTHENTICATION MODES&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380959576ddbb0bdb8661&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;대부분의 경우 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;STRICT&lt;/span&gt; 나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PERMISSIVE&lt;/span&gt; 모드를 사용할 것이다. 그러나 두 가지 모드가 더 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380cba04cd4a004ebf7e0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;UNSET&lt;/span&gt; : 부모의 PeerAuthentication 정책을 상속한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Inherit the PeerAuthentication policy of the parent.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23806693c3d10ffc9c3069&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DISABLE&lt;/span&gt; : 트래픽을 터널링하지 않는다. 그냥 보낸다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Do not tunnel the traffic; send it directly to the service.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c08c88fa67fec70e7b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;PeerAuthentication 리소스를 이렇게 사용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23807ab126ce4272d8683d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;상호 인증 트래픽, 평문 트래픽 등 워크로드로 터널링할 트래픽 유형을 지정하거나, 요청을 프록시로 보내지 않고 애플리케이션으로 바로 포워딩할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e3a4f9d06d799ab907&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 절에서는 상호 TLS를 사용할 때 트래픽이 암호화되는지 확인해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238051acf3d05028f13b7b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238024a8d7cb3ff2cfa80f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;tcpdump로 서비스 간 트래픽 스니핑하기&lt;/u&gt;&lt;/span&gt; EAVESDROPPING ON SERVICE-TO-SERVICE TRAFFIC USING TCPDUMP&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238048bcc9f9c309b01a19&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 프록시에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;tcpdump&lt;/span&gt;가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;설치&lt;/span&gt;돼 있다. 이 도구는 네트워크 인터페이스르 통과하는 네트워크 트래픽을 포착하고 분석한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23803a9c83f073c45179cf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;tcpdump 는 보안 때문에 권한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;privileged&lt;/span&gt; permission 이 필요한데, 기본적으로 이 권한은 꺼져 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380fb9113d0d707e09aa4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 권한을 켜려면 istioctl로 속성 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;values.global.proxy.privileged=true&lt;/code&gt; 로 설정해 이스티오 설치를 업데이트하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380f0aceac36e7602e41d&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1518.69px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1efb8b2c1c23804aa667c67b36d68e6a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;격상시킨 서비스 프록시의 권한은 악의적 공격의 매개체가 될 수 있다. 운영 환경 클러스터에서 이스티오를 설치할 때는 프록시의 권한을 격상시키지 말자. 서비스 하나를 빠르게 디버깅하고 싶을때는 kubectl edit로 디플로이먼트의 필드를 수작업으로 바꿀 수 있다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380e38c59c795bc7024c7&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# demo 프로파일 컨트롤 플레인 배포 시 istio-proxy 에 privileged 설정 &amp;gt;&amp;gt; 이미 설정 되어 있음
istioctl install --set profile=demo --set values.global.proxy.privileged=true -y&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238080a2f8c36d5af5537c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 확인
kubectl get istiooperator -n istio-system installed-state -o yaml
...
      proxy:
        ...
        privileged: true
...

kubectl get pod -n istioinaction -l app=webapp -o json
                        &quot;image&quot;: &quot;docker.io/istio/proxyv2:1.17.8&quot;,
                        &quot;imagePullPolicy&quot;: &quot;IfNotPresent&quot;,
                        &quot;name&quot;: &quot;istio-proxy&quot;,
                        ...
                        &quot;securityContext&quot;: {
                            &quot;allowPrivilegeEscalation&quot;: true,
                            &quot;capabilities&quot;: {
                                &quot;drop&quot;: [
                                    &quot;ALL&quot;
                                ]
                            },
                            &quot;privileged&quot;: true,
                            &quot;readOnlyRootFilesystem&quot;: true,
                            &quot;runAsGroup&quot;: 1337,
                            &quot;runAsNonRoot&quot;: true,
                            &quot;runAsUser&quot;: 1337
                        },
...

# 
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- whoami
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- id
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- sudo whoami
root

kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- sudo tcpdump -h&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23806ea21de99717cf66b1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238094b61cee77e83db6f1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;파드 트래픽을 스니핑 sniffing 해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380cda6aae88ca2ef3aef&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 패킷 모니터링 실행 해두기
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy \
  -- sudo tcpdump -l --immediate-mode -vv -s 0 '(((ip[2:2] - ((ip[0]&amp;amp;0xf)&amp;lt;&amp;lt;2)) - ((tcp[12]&amp;amp;0xf0)&amp;gt;&amp;gt;2)) != 0) and not (port 53)'
# -l : 표준 출력(stdout)을 라인 버퍼 모드로 설정. 터미널에서 실시간으로 결과를 보기 좋게 함 (pipe로 넘길 때도 유용).
# --immediate-mode : 커널 버퍼에서 패킷을 모아서 내보내지 않고, 캡처 즉시 사용자 공간으로 넘김 &amp;rarr; 딜레이 최소화.
# -vv : verbose 출력. 패킷에 대한 최대한의 상세 정보를 보여줌.
# -s 0 : snap length를 0으로 설정 &amp;rarr; 패킷 전체 내용을 캡처. (기본값은 262144 bytes, 예전 버전에서는 68 bytes로 잘렸음)
# '(((ip[2:2] - ((ip[0]&amp;amp;0xf)&amp;lt;&amp;lt;2)) - ((tcp[12]&amp;amp;0xf0)&amp;gt;&amp;gt;2)) != 0) and not (port 53)' : DNS패킷 제외하고 TCP payload 길이가 0이 아닌 패킷만 캡처
# 즉, SYN/ACK/FIN 같은 handshake 패킷(데이터 없는 패킷) 무시, 실제 데이터 있는 패킷만 캡처
# 결론 : 지연 없이, 전체 패킷 내용을, 매우 자세히 출력하고, DNS패킷 제외하고 TCP 데이터(payload)가 1 byte 이상 있는 패킷만 캡처

# 요청 실행
kubectl exec deploy/sleep -c sleep -- curl -s webapp.istioinaction/api/catalog -o /dev/null -w &quot;%{http_code}\n&quot;
...
## (1) sleep -&amp;gt; webapp 호출 HTTP
09:09:28.376191 IP (tos 0x0, ttl 63, id 18560, offset 0, flags [DF], proto TCP (6), length 146)
    10-10-0-14.sleep.default.svc.cluster.local.53182 &amp;gt; webapp-7685bcb84-hmdtl.http-alt: Flags [P.], cksum 0x14b3 (incorrect -&amp;gt; 0x1b2a), seq 2712301210:2712301304, ack 27344324, win 512, options [nop,nop,TS val 205598070 ecr 2202594813], length 94: HTTP, length: 94
        GET /api/catalog HTTP/1.1
        Host: webapp.istioinaction
        User-Agent: curl/8.5.0
        Accept: */*

## (2) webapp -&amp;gt; catalog 호출 HTTPS
09:09:28.378523 IP (tos 0x0, ttl 64, id 61154, offset 0, flags [DF], proto TCP (6), length 1304)
    webapp-7685bcb84-hmdtl.42824 &amp;gt; 10-10-0-12.catalog.istioinaction.svc.cluster.local.3000: Flags [P.], cksum 0x1937 (incorrect -&amp;gt; 0x58af), seq 762455895:762457147, ack 2699309704, win 871, options [nop,nop,TS val 3505077413 ecr 3377320582], length 1252

## (3) catalog -&amp;gt; webapp 응답 HTTPS
09:09:28.381739 IP (tos 0x0, ttl 63, id 65156, offset 0, flags [DF], proto TCP (6), length 1788)
    10-10-0-12.catalog.istioinaction.svc.cluster.local.3000 &amp;gt; webapp-7685bcb84-hmdtl.42824: Flags [P.], cksum 0x1b1b (incorrect -&amp;gt; 0x9cb2), seq 1:1737, ack 1252, win 729, options [nop,nop,TS val 3377775587 ecr 3505077413], length 1736

## (4) webapp -&amp;gt; sleep 응답 HTTP
09:09:28.382862 IP (tos 0x0, ttl 64, id 57235, offset 0, flags [DF], proto TCP (6), length 662)
    webapp-7685bcb84-hmdtl.http-alt &amp;gt; 10-10-0-14.sleep.default.svc.cluster.local.53182: Flags [P.], cksum 0x16b7 (incorrect -&amp;gt; 0xc4e5), seq 1:611, ack 94, win 512, options [nop,nop,TS val 2202594820 ecr 205598070], length 610: HTTP, length: 610
        HTTP/1.1 200 OK
        content-length: 357
        content-type: application/json; charset=utf-8
        date: Sat, 10 May 2025 09:09:28 GMT
        x-envoy-upstream-service-time: 6
        server: istio-envoy
        x-envoy-decorator-operation: webapp.istioinaction.svc.cluster.local:80/*

        [{&quot;id&quot;:1,&quot;color&quot;:&quot;amber&quot;,&quot;department&quot;:&quot;Eyewear&quot;,&quot;name&quot;:&quot;Elinor Glasses&quot;,&quot;price&quot;:&quot;282.00&quot;},{&quot;id&quot;:2,&quot;color&quot;:&quot;cyan&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Atlas Shirt&quot;,&quot;price&quot;:&quot;127.00&quot;},{&quot;id&quot;:3,&quot;color&quot;:&quot;teal&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Small Metal Shoes&quot;,&quot;price&quot;:&quot;232.00&quot;},{&quot;id&quot;:4,&quot;color&quot;:&quot;red&quot;,&quot;department&quot;:&quot;Watches&quot;,&quot;name&quot;:&quot;Red Dragon Watch&quot;,&quot;price&quot;:&quot;232.00&quot;}] [|http]
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23809794d8ec8ee7afc94b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
kubectl get svc,ep -n istioinaction
NAME              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/catalog   ClusterIP   10.200.1.181   &amp;lt;none&amp;gt;        80/TCP    28m
service/webapp    ClusterIP   10.200.1.212   &amp;lt;none&amp;gt;        80/TCP    28m

NAME                ENDPOINTS         AGE
endpoints/catalog   10.10.0.12:3000   28m
endpoints/webapp    10.10.0.13:8080   28m

#
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy \
  -- sudo tcpdump -l --immediate-mode -vv -s 0 'tcp port 3000 or tcp port 8080'

# 요청 실행
kubectl exec deploy/sleep -c sleep -- curl -s webapp.istioinaction/api/catalog -o /dev/null -w &quot;%{http_code}\n&quot;

09:14:40.243491 IP (tos 0x0, ttl 63, id 39438, offset 0, flags [DF], proto TCP (6), length 146)
    10-10-0-14.sleep.default.svc.cluster.local.52506 &amp;gt; webapp-7685bcb84-hmdtl.http-alt: Flags [P.], cksum 0x14b3 (incorrect -&amp;gt; 0x535d), seq 1:95, ack 1, win 512, options [nop,nop,TS val 205909945 ecr 2202906687], length 94: HTTP, length: 94
        GET /api/catalog HTTP/1.1
        Host: webapp.istioinaction
        User-Agent: curl/8.5.0
        Accept: */*

09:14:40.243494 IP (tos 0x0, ttl 64, id 46837, offset 0, flags [DF], proto TCP (6), length 52)
    webapp-7685bcb84-hmdtl.http-alt &amp;gt; 10-10-0-14.sleep.default.svc.cluster.local.52506: Flags [.], cksum 0x1455 (incorrect -&amp;gt; 0xae6d), seq 1, ack 95, win 511, options [nop,nop,TS val 2202906688 ecr 205909945], length 0

09:14:40.245088 IP (tos 0x0, ttl 64, id 26320, offset 0, flags [DF], proto TCP (6), length 1304)
    webapp-7685bcb84-hmdtl.42808 &amp;gt; 10-10-0-12.catalog.istioinaction.svc.cluster.local.3000: Flags [P.], cksum 0x1937 (incorrect -&amp;gt; 0xb199), seq 3097730358:3097731610, ack 4260227584, win 871, options [nop,nop,TS val 3505389286 ecr 3377317193], length 1252

09:14:40.247529 IP (tos 0x0, ttl 63, id 55572, offset 0, flags [DF], proto TCP (6), length 1788)
    10-10-0-12.catalog.istioinaction.svc.cluster.local.3000 &amp;gt; webapp-7685bcb84-hmdtl.42808: Flags [P.], cksum 0x1b1b (incorrect -&amp;gt; 0xb87c), seq 1:1737, ack 1252, win 729, options [nop,nop,TS val 3378087460 ecr 3505389286], length 1736

09:14:40.247543 IP (tos 0x0, ttl 64, id 26321, offset 0, flags [DF], proto TCP (6), length 52)
    webapp-7685bcb84-hmdtl.42808 &amp;gt; 10-10-0-12.catalog.istioinaction.svc.cluster.local.3000: Flags [.], cksum 0x1453 (incorrect -&amp;gt; 0x436c), seq 1252, ack 1737, win 871, options [nop,nop,TS val 3505389289 ecr 3378087460], length 0

09:14:40.248057 IP (tos 0x0, ttl 64, id 46838, offset 0, flags [DF], proto TCP (6), length 662)
    webapp-7685bcb84-hmdtl.http-alt &amp;gt; 10-10-0-14.sleep.default.svc.cluster.local.52506: Flags [P.], cksum 0x16b7 (incorrect -&amp;gt; 0x0024), seq 1:611, ack 95, win 512, options [nop,nop,TS val 2202906692 ecr 205909945], length 610: HTTP, length: 610
        HTTP/1.1 200 OK
        content-length: 357
        content-type: application/json; charset=utf-8
        date: Sat, 10 May 2025 09:14:40 GMT
        x-envoy-upstream-service-time: 4
        server: istio-envoy
        x-envoy-decorator-operation: webapp.istioinaction.svc.cluster.local:80/*
        [{&quot;id&quot;:1,&quot;color&quot;:&quot;amber&quot;,&quot;department&quot;:&quot;Eyewear&quot;,&quot;name&quot;:&quot;Elinor Glasses&quot;,&quot;price&quot;:&quot;282.00&quot;},{&quot;id&quot;:2,&quot;color&quot;:&quot;cyan&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Atlas Shirt&quot;,&quot;price&quot;:&quot;127.00&quot;},{&quot;id&quot;:3,&quot;color&quot;:&quot;teal&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Small Metal Shoes&quot;,&quot;price&quot;:&quot;232.00&quot;},{&quot;id&quot;:4,&quot;color&quot;:&quot;red&quot;,&quot;department&quot;:&quot;Watches&quot;,&quot;name&quot;:&quot;Red Dragon Watch&quot;,&quot;price&quot;:&quot;232.00&quot;}] [|http]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238050ac69eeb29f94845d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23807cbeccf33c1cdc86bf&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;워크로드 ID가 워크로드 서비스 어카운트에 연결돼 있는지 확인하기&lt;/u&gt;&lt;/span&gt; VERIFYING THAT WORKLOAD IDENTITIES ARE TIED TO THE WORKLOAD SERVICE ACCOUNT&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238013b2caef551f1db20a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;상호 인증을 다룬 절을 끝내기 전에 발급된 인증서가 유효한 SVID 문서인지, SPIFFE ID가 인코딩돼 있는지, 그 ID가 워크로드 서비스 어카운트와 일치하는지 확인해보자.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23803e964aef70cb627de7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;openssl 명령어를 사용해 catalog 워크로드의 X.509 인증서 내용물을 확인한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23804cabd0cff0f2aa1ca3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# (참고) 패킷 모니터링 : 아래 openssl 실행 시 동작 확인
kubectl exec -it -n istioinaction deploy/catalog -c istio-proxy \
  -- sudo tcpdump -l --immediate-mode -vv -s 0 'tcp port 3000'
  

# catalog 의 X.509 인증서 내용 확인
kubectl -n istioinaction exec deploy/webapp -c istio-proxy -- ls -l /var/run/secrets/istio/root-cert.pem
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- openssl x509 -in /var/run/secrets/istio/root-cert.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            cc:9f:cd:f9:f6:55:55:31:30:6d:89:ad:4d:66:86:15
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: O = cluster.local
        Validity
            Not Before: May 10 08:20:03 2025 GMT
            Not After : May  8 08:20:03 2035 GMT
        Subject: O = cluster.local
...

kubectl -n istioinaction exec deploy/webapp -c istio-proxy -- openssl -h
kubectl -n istioinaction exec deploy/webapp -c istio-proxy -- openssl s_client -h

# openssl s_client &amp;rarr; TLS 서버에 연결해 handshake와 인증서 체인을 보여줌
# -showcerts &amp;rarr; 서버가 보낸 전체 인증서 체인 출력
# -connect catalog.istioinaction.svc.cluster.local:80 &amp;rarr; Istio 서비스 catalog로 TCP 80 연결
# -CAfile /var/run/secrets/istio/root-cert.pem &amp;rarr; Istio의 root CA로 서버 인증서 검증
# 결론 : Envoy proxy에서 catalog 서비스로 연결하여 TLS handshake 및 인증서 체인 출력 후 사람이 읽을 수 있는 형식으로 해석
kubectl -n istioinaction exec deploy/webapp -c istio-proxy \
  -- openssl s_client -showcerts \
  -connect catalog.istioinaction.svc.cluster.local:80 \
  -CAfile /var/run/secrets/istio/root-cert.pem | \
  openssl x509 -in /dev/stdin -text -noout
...
        Validity
            Not Before: May 10 08:43:34 2025 GMT # 유효기간 1일 2분
            Not After : May 11 08:45:34 2025 GMT
        ...
        X509v3 extensions:
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication # 사용처 : 웹서버, 웹클라이언트
            ...
            X509v3 Subject Alternative Name: critical
                URI:spiffe://cluster.local/ns/istioinaction/sa/catalog # SPIFFE ID 확인

# catalog 파드의 서비스 어카운트 확인
kubectl describe pod -n istioinaction -l app=catalog | grep 'Service Account'
Service Account:  catalog&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238014b202fe6478f65c13&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23805e8129efd164a29d26&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;루트 인증서 서명 확인&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f6934bee2e9c4489c9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;openssl verify&lt;/code&gt; 로 인증 기관 CA 루트 인증서에 대해 서명을 확인함으로써 X.509 SVID의 내용물이 유효한지 살펴보자.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d096b0e660fbadce16&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;루트 인증서는 istio-proxy 컨테이너에서 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/var/run/secrets/istio/root-cert.pem&lt;/code&gt; 경로에 마운트돼 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23808282b8d04a3d946a7a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# webapp.istio-proxy 쉘 접속
kubectl -n istioinaction exec -it deploy/webapp -c istio-proxy -- /bin/bash
-----------------------------------------------
# 인증서 검증
openssl verify -CAfile /var/run/secrets/istio/root-cert.pem \
  &amp;lt;(openssl s_client -connect \
  catalog.istioinaction.svc.cluster.local:80 -showcerts 2&amp;gt;/dev/null)
/dev/fd/63: OK
# 검증에 성공 시 OK 메시지 출력: 이스티오 CA가 인증서에 서명했으며, 내부 데이터가 믿을 수 있다는 것임을 알려줌.

exit
-----------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23800c80cef72295affe1b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c238021bf59f9e5e153d226&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 참가자 간 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;peer-to-peer&lt;/span&gt; 인증을 용의하게 하는 모든 구성 요소를 검증했으므로, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;발급된 ID는 검증&lt;/span&gt;할 수 있는 것이고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트래픽은 안전하다는 것을 확신&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238038a6d6e24a1a836b78&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;검증할 수 있는 ID가 접&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;근 제어의 선행 조건&lt;/span&gt;이다. 다시 말해, 워크로드의 ID를 알고 있으므로 수행할 수 있는 작업을 정의할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380dab1e2da584d771616&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 절에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가 정책&lt;/span&gt;을 살펴본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23804ebfcadf123925cfbd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Ubuntu 24.04 에 jwt 설치 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://lindevs.com/install-jwt-cli-on-ubuntu&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://lindevs.com/install-jwt-cli-on-ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23800598d2dfde0cb42d77&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1efb8b2c1c2380b1a45beaf4f7ba4859&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;9.C. 이스티오 보안: SPIFFE(부록 C)&lt;/p&gt;
&lt;div id=&quot;block-1efb8b2c1c23801bb189c0508449929d&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;C.1 PKI를 사용한 인증&lt;/span&gt; Authentication using PKI (public key infrastructure) &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23808fae8dcdd089fe33b6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;들어가며&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380a1acb6ea7f0584dd0c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;World Wide Web에서 통신 당사자는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; PKI&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;P&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;ublic &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;K&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;ey &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;I&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;nfrastructure&lt;/span&gt; (공개 키 인프라) 규격을 따라 발급한 디지털 서명 인증서를 사용해 인증한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23803da340c092df9b9672&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;PKI는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;절차를 정의&lt;/span&gt;하는 프레임워크인데, 이 절차는 서버(웹 앱 등)에는 자신의 정체를 증명할 수 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;디지털 인증서&lt;/span&gt;를 제공하고 클라이언트에는 디지털 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증서의 유효성을 검증&lt;/span&gt;할 수 있는 수단을 제공한다. &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.securew2.com/blog/public-key-infrastructure-explained&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.securew2.com/blog/public-key-infrastructure-explained&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380639ff5de22c8905d3e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23802f96cbee5c4ca0f4b9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;PKI에서 제공하는 인증서에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;공개 키&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;개인 키&lt;/span&gt;가 있다. 클라이언트에게 인증서를 인증 수단으로 제시하는데, 공개 키는 이 인증서 안에 포함된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ec8924e07539e0b67b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클라이언트는 공개된 네트워크에서 서버로 데이터를 전송하기 전에 공개 키를 사용해 데이터를 암호화하며, 개인 키를 가진 서버만이 데이터를 복호화할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23802a99d9e2f5c10cc2ce&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 방식으로 데이터는 전송 중에 안전하게 보호된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23800bbbdfdd11625e265d&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1546.67px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1efb8b2c1c2380078acbfc7a1f152ef7&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;공개 키 인증서의 표준 형식을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;X.509 인증&lt;/span&gt;서라고 한다. 이 책에서는 X.509 인증서라는 용어와 디지털 인증서라는 용어를 같은 뜻으로 사용한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380eeb7e9e053effa84b2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380faaa50e83422cd923f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;국제 인터넷 표준화 기구 IETF는 전송 계층 보안 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TLS&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;T&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;ransport &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;L&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;ayer &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;S&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;ecurity&lt;/span&gt; 프로토콜(PKI를 사용하기는 하지만 PKI만 사용해야 하는 것은 아님)을 정의하고, X.509 인증서를 공급해 트래픽 인증 및 암호화를 용의하게 했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238020890afc9b32d600e1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238051bff4e8a6aa473c84&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;C.1.1 TLS 및 최종 사용자 인증을 통한 트래픽 암호화&lt;/u&gt;&lt;/span&gt; Traffic encryption via TLS and end-user authentication&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23806981e1df91af374091&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;TLS 프로토콜은 TLS 핸드셰이크 절차에서 서버의 유효성을 인증하고 트래픽 대칭 키 암호화용 키를 안전하게 교환하는 데 X.509 인증서를 기본 메커니즘으로 사용한다. (그림 C.1 참조)&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380da9764f5956798363c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/bca4bfd9-6333-4f5d-9d0a-2b909c9bc7c9/CleanShot_2025-05-02_at_09.22.56.png?table=block&amp;amp;id=1efb8b2c-1c23-80da-9764-f5956798363c&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=F9DNWUvROaH3_UnyqoUhd1g2kVqSJBk4RJGByeAzMbc&quot; alt=&quot;TLS 핸드셰이크 단계&quot; width=&quot;520.9658813476562&quot; height=&quot;403.97354330989083&quot; /&gt;TLS 핸드셰이크 단계&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380468cceeb40f0cc9339&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라이언트&lt;/span&gt;가 자신이 지원하는 TLS 버전과 암호화 수단을 포함한 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ClientHello&lt;/code&gt; 로 핸드셰이크를 시작한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f1a4efdccf59edc5c0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서버&lt;/span&gt;는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ServerHello&lt;/code&gt; 와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자신의 X.509 인증서&lt;/span&gt;로 응답한다. 인증서에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서버의 ID 정보&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;공개 키&lt;/span&gt;가 포함돼 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238096aaabe4c8c8814494&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라이언트&lt;/span&gt;는 서버의 인증서 데이터가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;변조&lt;/span&gt;되지 않았음을 확인하고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;신뢰 체인&lt;/span&gt;을 검증한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b79ae0cefdbb3e8007&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;검증에 성공하면, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라이언트&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서버&lt;/span&gt;에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;비밀 키&lt;/span&gt;를 보낸다. 이 키는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;임의&lt;/span&gt;로 생성한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;문자열&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서버&lt;/span&gt;의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;공개 키&lt;/span&gt;로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;암호화&lt;/span&gt;한 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380989072ca6c992444b5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서버&lt;/span&gt;는 자신의 개인 키로 비밀 키를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;복호화&lt;/span&gt;하고, 복호화된 비밀 키로 &amp;lsquo;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;finished&lt;/span&gt;&amp;rsquo; 메시지를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;암호화&lt;/span&gt;해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라이언트&lt;/span&gt;로 보낸다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23808ab6d3eff308760d84&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라이언트&lt;/span&gt;도 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;비밀 키&lt;/span&gt;로 암호화한 &amp;lsquo;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;finished&lt;/span&gt;&amp;rsquo; 메시지를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서버&lt;/span&gt;에 보내면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TLS 핸드셰이크&lt;/span&gt;가 완료된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380798472d5e62e60d081&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-1efb8b2c1c2380779c04fc0a3fef3d74&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TLS 핸드셰이크&lt;/span&gt;의 결실은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라이언트가 서버를 인증&lt;/span&gt;했고&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 대칭 키를 안전하게 교환&lt;/span&gt;했다는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238097a36ac71f3ef9e2ac&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 대칭 키는 이 커넥션에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라이언트와 서버를 오가는 트래픽을 암호화&lt;/span&gt;하는데 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23806d92b5f52036ac64f4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 방식이 비대칭 암호화보다 성능이 더 좋기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b2b580eb26bc4c682a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;최종 사용자에게 이런 절차는 브라우저가 투명하게 수행하는 것으로, 주소 표시줄에 녹색 자물쇠로 표시돼 수신자가 인증됐고 트래픽이 암호화돼 수신자만 복호화할 수 있다는 것을 확인해준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380cebd81ec08ad84a044&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e09193fd7a9c1753a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서버&lt;/span&gt;에서&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 최종 사용자를 인증&lt;/span&gt;하는 것은 구현하기 나름이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23802a9d0ccfc141b1aded&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여러 가지 방법이 있지만, 그 모든 방법의 핵심은 비밀번호를 알고 있는 사용자가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;세션 쿠키&lt;/span&gt;나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;JWT&lt;/span&gt;(JSON Web Token)를 받는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380cfb2c9e35b33d0ff43&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이때 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;JWT&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;수명이 짧고&lt;/span&gt; 사용자의 후속 요청을 서버에 인증하기 위한 정보를 포함하는 것이 이상적이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c89423dc8124d83caf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 JWT를 사용하는 최종 사용자 인증을 지원한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380bf96b0dda96c344952&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실제로 동작하는 모습은 9.4절에서 살펴봤다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380f7af3ede198892446e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b29d94f581a701501b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;C.2 SPIFFE: 모든 이를 위한 안전한 운영 환경 ID 프레임워크&lt;/span&gt; Secure Production Identity Framework for Everyone &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-8110ed83907b409f95d63a37597e8b41&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-9242da776b49446ea43ff58481c186e2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;SPIFFE는 고도로 동적이며 이질적인 환경에서 워크로드에 ID를 제공하기 위한 오픈소스 표준 집합이다.&lt;/li&gt;
&lt;li id=&quot;block-9c59fe8bcfac46d788851fa5ae97a4eb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ID를 발급하고 부트스트랩하기 위해 SPIFFE는 다음 사양을 정의한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-7e940b537d9746fbb3376a76d0af71fb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SPIFFE ID&lt;/span&gt; : 신뢰 도메인 내에서 서비스를 고유하게 구별한다.&lt;/li&gt;
&lt;li id=&quot;block-abb2a37cf8674aaabfb7856c7282f79b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Workload Endpoint&lt;/span&gt; : 워크로드의 ID를 부트스트랩한다.&lt;/li&gt;
&lt;li id=&quot;block-05b7c5799892459fad1df85cffea5f0e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Workload API&lt;/span&gt; : SPIFFE ID가 포함된 인증서를 서명하고 발급한다.&lt;/li&gt;
&lt;li id=&quot;block-960af98ff6d040fc82ca114c9ed0c329&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SVID&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;S&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;PIFFE &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;V&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;erifiable &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;I&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;dentity &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;D&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;ocument&lt;/span&gt; : 워크로드 API가 발급한 인증서로 표현된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-0dd1af90a2a54e528541604d360e6e7a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-1eb3312d931d4083ba77c94d3537850c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;SPIFFE 사양은 SPIFFE ID 형식으로 워크로드에 ID를 발급하고 이를 SVID에 인코딩하는 절차를 정의할 뿐 아니라, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인 구성 요소(워크로드 API)와 데이터 플레인 구성 요소(워크로드 엔드포인트)가&lt;/span&gt; 워크로드의 ID를 검증하고 할당하고 형식의 유효성을 검사하기 위해 협동하는 방법도 정의한다.&lt;/li&gt;
&lt;li id=&quot;block-5b42618b4bca4a7d8b696c3d7e88f25e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 이런 사양을 구현하므로 이에 대한 더 깊은 이해가 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-89d935014dc841bd9633cd12fce061c6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-ad090c8bdec84e5aab04fac4e61c33bc&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;C.2.1 SPIFFE ID: Workload identity&lt;/span&gt; 워크로드 ID&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-b6973eb486c547e4ae3b0c8d07b16c2c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;SPIFFE ID는 RFC 3986 호환 URI로, &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;spiffe://trust-domain/path&lt;/code&gt; 형식을 따른다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-32fdcc20bb9a4b549ab78782627b41e9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;trust-domain 은 개인이나 조직 같은 ID 발급자를 나타낸다.&lt;/li&gt;
&lt;li id=&quot;block-d7b96044b4dd49d4b5f659b8290243b4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;path는 trust-domain 내에서 워크로드를 고유하게 식별한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-e6be0bbb3ced46ccb6de9321e96b186d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;경로&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;path&lt;/span&gt;로 워크로드를 식별하는 방법의 세부 사항에는 제약이 없으며 SPIFFE 사양 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;구현자가 결정&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-97491d5dee724592bc11bf82ba000e6b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 부록에서는 이스티오가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;쿠버네티스 서비스 어카운트&lt;/span&gt;를 사용해 워크로드를 식별하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;경로&lt;/span&gt;를 정의하는 방법을 살펴본다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380aeb386edbd447359a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;path 형식이 ns/namespace/sa/serviceaccount로 구성이 됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-f8af06aaf907416abf97034fcc0f18f9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-f99e211d7cda443a8440cf5ff258aec0&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;C.2.2 Workload API&lt;/span&gt; 워크로드 API&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-4ff56c04dc0b49faa481e0b1b7fa3600&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드 API&lt;/span&gt;는 SPIFFE 사양에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인&lt;/span&gt; 구성 요소를 나타내며, 워크로드가 자신의 ID를 정의하는 SVID 형식 디지털 인증서를 가져갈 수 있도록 엔드포인트를 노출한다.&lt;/li&gt;
&lt;li id=&quot;block-ccb288e3ddf24dc7992a6a92ee9dae6f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드 API&lt;/span&gt;는 두 가지 주요 기능은 다음과 같다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-594b57e8b7b34b03a4c9a5d3aece5a8c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드가 제출한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증서 서명 요청&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;CSR&lt;/span&gt;에 인증 기관 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;CA&lt;/span&gt; 개인 키로 서명함으로써 워크로드에 인증서 발급&lt;/li&gt;
&lt;li id=&quot;block-aa2775608ece4ea59457feacb011ea4c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드 엔드포인트에서 해당 기능을 사용할 수 있도록 API 노출&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-e7283e32e1004ecc9d90126ca5b5e2e0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-9622346ae9614ddab76c304353fd5811&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사양 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;specification sets&lt;/span&gt; 은 워크로드가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자신의 ID를 정의하는 비밀이나 기타 정보를 보유해서는 안 된다&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;제한&lt;/span&gt;(규칙)을 둔다.&lt;/li&gt;
&lt;li id=&quot;block-117873b90a0c43efb7e2a3c2f9c979f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇지 않으면, 해당 비밀에 접근할 수 있는 악의적인 사용자가 시스템을 쉽게 악용할 수 있기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-83fd455ee74d4f4b9d797b408b6a2696&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 제한 때문에 워크로드에는 인증 수단이 없어 워크로드 API로 보안 통신을 시작할 수 없다.&lt;/li&gt;
&lt;li id=&quot;block-9445f98a8d1e4823ba3674cf2d2e8d4c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 상황을 해결하기 위해 SPIFFE는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드 엔드포인트 사양&lt;/span&gt;을 정의한다.&lt;/li&gt;
&lt;li id=&quot;block-d17716152fa948ef92f484379ab52205&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 사양은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 플레인&lt;/span&gt; 구성 요소를 나타내고, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드의 ID를 부트스트랩&lt;/span&gt;하는 데 필요한 모든 작업을 수행한다.&lt;/li&gt;
&lt;li id=&quot;block-717403e95b414fc0a7504a3a89a331a1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드 API와 보안 통신을 시작&lt;/span&gt;하거나 도청 또는 중간자 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;공격에 취약하지 않게&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SVID를 가져오&lt;/span&gt;는 등의 활동을 수행한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-b244e7e60b054825897285d732615786&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-eb5265ddf0274a9082460e8e877efeb5&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;C.2.3 Workload endpoints&lt;/span&gt; 워크로드 엔드포인트&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-53117ec1077642959e0c0ed7dd2696be&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드 엔드포인트는 SPIFFE 사양의 데이터 플레인 구성 요소를 나타낸다. 이는 모든 워크로드와 함께 배포돼 다음 기능을 제공한다.
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-f107142fb12649bdb8024dce978209cb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;커널 검사 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;kernel introspection&lt;/span&gt; 또는 orchestrator interrogation &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;(쿼리, 질문)&lt;/span&gt; 같은 방법을 사용해 워크로드의 ID를 확인한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-910ec3e0e47c48949518729133bbd7c6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드 API와 보안 통신을 시작하고 유지한다. 이 보안 통신은 SVID를 가져오고 로테이션하는 데 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-95b6659713e7434f9883a2557f652955&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드 증명&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;attestation&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-45e25e72bfda4c6fbc3fdf2dee7fd971&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드 API 노출&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;exposure&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-2ccfc5ce4ee54a06aca93913535621a4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-9b6f701af3ea4fb5aa6a326abe4cf27b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 C.2는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드에 ID를 발급하는 단계&lt;/span&gt;의 개요를 보여준다.
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-9f11c091c08d4c9d938c7bc2c8749d83&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 인증서의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SAN&lt;/span&gt;의 URI 확장에는 SPIFFE ID가 있다.&lt;/li&gt;
&lt;li id=&quot;block-8ad5dcc7718645d88d0017270b34bfa9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 인증서는 워크로드 ID를 나타내는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SVID&lt;/span&gt;이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-130646627bc1441f9e57dc122a83c03d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-a6cf35a9b8014f85afc7c77cf1b86510&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/cbe08ed5-8de0-4482-82f1-d1dc3081e167/CleanShot_2025-05-02_at_10.16.04.png?table=block&amp;amp;id=a6cf35a9-b801-4f85-afc7-c77cf1b86510&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=QAoJX1KWDBOZOoE2K4mvs6QPnDQ5ujOKMVasQtsJL0E&quot; alt=&quot;워크로드에 ID를 발급하기&quot; width=&quot;480&quot; height=&quot;357.6&quot; /&gt;워크로드에 ID를 발급하기&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-c94b37e1d8d74708ac3bb73fad55e3e0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드 엔드포인트&lt;/span&gt;는 워크로드의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;무결성을&lt;/span&gt; 확인하고(즉, 워크로드 증명을 수행하고)&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; SPIFFIE ID가 인코딩된 CSR을 생성&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-b69cb4b4fb1d4bddb4335404d53d7171&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드 엔드포인트는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서명을 위해 워크로드 API에 CSR을 제출&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-f5601379fac24ceb8796516326f6789b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드 API는 CSR을 서명하고 디지털 서명된 인증서로 응답&lt;/span&gt;한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-99929c3c12444d549093be92511498b4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;C.2.4 SPIFFE Verifiable Identity Documents&lt;/span&gt; 검증할 수 있는 ID 문서&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-852fa9cb27194425a173f3304cb69159&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SVID&lt;/span&gt; (SPIFFE 검증할 수 있는 ID 문서) 는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드의 정체&lt;/span&gt;를 나타내는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;검증&lt;/span&gt;할 수 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;문서&lt;/span&gt;다.&lt;/li&gt;
&lt;li id=&quot;block-0530953ef27f43aaa5099c0284abaa25&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;검증할 수 있다는 것이 가장 중요한 속성인데, 그렇지 않으면 수신자가 워크로드의 정체를 신뢰할 수 없기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-dadc98e1f5e74b1a86e1a0dc6dd3cf6a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사양은 SVID 표현 기준을 충족하는 문서로 두 가지 유형인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;X.509 인증서&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;JWT&lt;/span&gt;를 정의한다.&lt;/li&gt;
&lt;li id=&quot;block-6ee6abd220dd4e49b4e9e5394ac48229&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;둘 다 다음과 같은 요소로 구성된다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-af161ecba7464410a8c3884b8297e376&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;SPIFFE ID, 워크로드 ID를 나타낸다.&lt;/li&gt;
&lt;li id=&quot;block-61d7e87d38d8498397f8f3fa2aa4aab7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;유효한 서명, SPIFFE ID가 변조되지 않았음을 확인한다.&lt;/li&gt;
&lt;li id=&quot;block-c05cc4aa1d74426bb024bf614b35f299&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(선택 사항) 워크로드 간에 보안 통신 채널을 구축하기 위한 공개 키&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-ac0089a3e0674e8a92a01f35491c7cf8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-f6288439789b41f0b38f3380ec51a56a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오는 SVID&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;X.509 인증서&lt;/span&gt;로 구현한다.&lt;/li&gt;
&lt;li id=&quot;block-8fce8f0a0b494c1fb3b61490c555e45f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그 방법은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SAN&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;S&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;ubject &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;A&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;lternative &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;N&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;ame&lt;/span&gt; 확장에 SPIFFE ID를 URI로 인코딩하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-80acf626a9ad4c4e9c13c6f1a70b8ba0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;X.509 인증서를 사용하면 추가적인 이점이 있는데, 워크로드가 서로 간의 트래픽을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;상호 인증&lt;/span&gt;하고&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 암호화&lt;/span&gt;할 수 있다는 것이다. (그림 C.3 참조)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-f9921825107744b5898600b7a023d1cc&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/6acdd2f5-3850-4bdc-a7c6-92671b37f0b3/CleanShot_2025-05-02_at_10.23.57.png?table=block&amp;amp;id=f9921825-1077-44b5-8986-00b7a023d1cc&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=YDjvK15THOYJj-PTLbV1qDNXZKbXHwR5Gn6zUhLWfvI&quot; alt=&quot;자신의 SVID를 가져오고 보안 통신을 시작하는 워크로드&quot; width=&quot;816&quot; height=&quot;354.6420079260238&quot; /&gt;자신의 SVID를 가져오고 보안 통신을 시작하는 워크로드&lt;/div&gt;
&lt;div id=&quot;block-84faacab76f340038f801727ddff63c9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-c275915e0e224901a7d44e9730716a5e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 SPIFFE 사양을 구현함으로써, 모든 워크로드가 각자의 ID를 공급받고 그 ID를 증거로 인증서를 받는다는 것이 자동으로 보장된다.&lt;/li&gt;
&lt;li id=&quot;block-9186e799c6724773abf5b5644feadb93&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 인증서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;상호 인증&lt;/span&gt;과 모든 서비스 간 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;통신을 암호화&lt;/span&gt;하는 데 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-b0e2169d789849a9b154823e5f9cce81&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러므로 이 기능을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자동 상호 TLS&lt;/span&gt;라고 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Hence this feature is called &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;auto mTLS&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-612f6116868e4485b2ad0fd5530b7423&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-b78c34b38b7845ccbb38d667d1345143&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;C.2.5 How Istio implements SPIFFE&lt;/span&gt; 이스티오가 SPIFFE를 구현하는 방법&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e38e04d3bf74a44a629528c87a12923&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오를 사용하면 다음 두 구성 요소가 협업해 워크로드에 ID를 제공한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1a7f972ef5884a4582921290d8f17dba&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ID를 부트스트랩하는 워크로드 엔드포인트&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; (데이터플레인, 이스티오 프록시 pilot agent)&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-7bf2ee54fdc14aba86d1f0dd0e9c3a9f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증서를 발급하는 워크로드 API&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; (컨트롤플레인, istiod 의 Istio CA)&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-a6ac6943c98f4c56a9ddc2a2a2822b18&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-f64229a62ccf43fda9d87091bce33d76&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드 엔드포인트&lt;/span&gt; 사양은 워크로드와 함께 배포되는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오 프록시가 구현&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-008caf17d8dc445e99799607d64c8e54&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 프록시는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ID를 부트스트랩&lt;/span&gt;하고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오 CA에서 인증서를 가져&lt;/span&gt;오는데, 이스티오 CA는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt;의 구성 요소로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드 API&lt;/span&gt; 사양을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;구현&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-951b8d92f5bc482498eaf7b8251a20a1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 C.4는 이스티오가 SPIFFE 구성 요소를 구현하는 방법을 보여준다.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-9c22ab1194284e9baa3a41394d035718&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/f8227f78-1a71-4876-b23e-c0c57cc359b4/CleanShot_2025-05-02_at_10.37.10.png?table=block&amp;amp;id=9c22ab11-9428-4e9b-aa3a-41394d035718&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=5Dpfz5N_Owm_KvK1ED1nMdURmfuAceQfPMfDHD6WYPk&quot; alt=&quot;이스티오 구성 요소를 SPIFFE 사양에 매핑하기&quot; width=&quot;768&quot; height=&quot;562.9960159362549&quot; /&gt;이스티오 구성 요소를 SPIFFE 사양에 매핑하기&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-aca130c351db43b0b8ae3b4ec1e5812a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드 엔드포인트&lt;/span&gt;는 ID 부트스트랩을 수행하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오 파일럿 에이전&lt;/span&gt;트로 구현한다.&lt;/li&gt;
&lt;li id=&quot;block-fb9e20683b354b4fa94dad892c7c9a65&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드 API&lt;/span&gt;는 인증서를 발급하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오 CA&lt;/span&gt;로 구현한다.&lt;/li&gt;
&lt;li id=&quot;block-eeea091db7184d5a87d8a8fb1490cf87&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오에서 ID를 발급하는 워크로드는 서비스 프록시다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-58cc0c92a3414e83a54071607bb03e6b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-cb9d8a363c834f6bbd651c75bbe66f6d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 이스티오가 SPIFFE를 구현하는 방법을 고수준에서 살펴본 것이다.&lt;/li&gt;
&lt;li id=&quot;block-4c2e4cf1a2fd4c63a7a1e9293a6f6762&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;해당 내용을 이해하고 기억하기 위해 이 과정을 단계별로 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-eed224b7f84f456fa0729e8a49eac20d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c18a3b13235451aae81b80f8873b97c&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;C.2.6 Step-by-step bootstrapping of workload identity*&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &lt;/span&gt;워크로드 ID의 단계별 부트스트랩&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-ab99e9fd0c8248129a27af124d6e71a2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본적으로 쿠버네티스에서 초기화된 모든 파드에는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/var/run/secrets/kubernetes.io/serviceaccount/&lt;/code&gt; 경로에 시크릿이 마운트돼 있다.&lt;/li&gt;
&lt;li id=&quot;block-28c2b419702f447e81454621d3e06d6d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 시크릿에는 쿠버네티스 API 서버와 안전하게 통신하는 데 필요한 모든 데이터가 포함돼 있다.
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-cdfb64dbe40b447f86cfcbb7bb361163&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The service account token contains a set of claims for the service account representing the Pod.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-471b64bb12784a6fb74da8fa33e67d02&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ca.crt 는 쿠버네티스 API 서버가 발급한 인증서의 유효성을 검증한다.&lt;/li&gt;
&lt;li id=&quot;block-466b9bb975274813990cba472e758cd0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네임스페이스는 파드가 위치한 곳을 나타낸다.&lt;/li&gt;
&lt;li id=&quot;block-3b445c6783844cb0958790241d23fa84&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 어카운트 토큰에는 파드를 나타내는 서비스 어카운트에 대한 (토큰)클레임들이 포함된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-24663c4e56524340b856b788b3651936&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-6fc871f3913d4f3ea176f66cd216d848&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ID 부트스트랩 과정에서 가장 중요한 요소는 쿠버네티스 API가 발급한 토큰이다. &amp;rarr; serviceaccount에 의해 projected 됨&lt;/li&gt;
&lt;li id=&quot;block-fac3c06bd44b4c709528e7569416f0ee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;토큰의 페이로드는 수정할 수 없는데, 수정하면 서명 유효성 검사를 통과하지 못하기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-5f72c9c484d9411bb22183e6b5417036&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;페이로드에는 애플리케이션을 식별하는 데이터가 포함된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-109a9ce013f5423ba4d0e496ba7c2071&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- ls -l /var/run/secrets/kubernetes.io/serviceaccount/
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- cat /var/run/secrets/kubernetes.io/serviceaccount/token
TOKEN=$(kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- cat /var/run/secrets/kubernetes.io/serviceaccount/token)

# 헤더 디코딩 
echo $TOKEN | cut -d '.' -f1 | base64 --decode | sed 's/$/}/' | jq
{
  &quot;alg&quot;: &quot;RS256&quot;,
  &quot;kid&quot;: &quot;SN10I18dRCUt2qzMCIixl46dqMB6ssinwJKzuFuDDWM&quot;
}

# 페이로드 디코딩
echo $TOKEN | cut -d '.' -f2 | base64 --decode | sed 's/$/}/' | jq
{
  &quot;aud&quot;: [
    &quot;https://kubernetes.default.svc.cluster.local&quot;
  ],
  &quot;exp&quot;: 1778405668,
  &quot;iat&quot;: 1746869668,
  &quot;iss&quot;: &quot;https://kubernetes.default.svc.cluster.local&quot;,
  &quot;kubernetes.io&quot;: {
    &quot;namespace&quot;: &quot;istioinaction&quot;,
    &quot;pod&quot;: {
      &quot;name&quot;: &quot;webapp-7685bcb84-hmdtl&quot;,
      &quot;uid&quot;: &quot;96cf1bee-2cdd-48cd-bd22-5fb60503bc0a&quot;
    },
    &quot;serviceaccount&quot;: {
      &quot;name&quot;: &quot;webapp&quot;,
      &quot;uid&quot;: &quot;438f60f1-8d40-43b5-b8e0-c14d59081ea3&quot;
    },
    &quot;warnafter&quot;: 1746873275
  },
  &quot;nbf&quot;: 1746869668,
  &quot;sub&quot;: &quot;system:serviceaccount:istioinaction:webapp&quot;
}

# (옵션) brew install jwt-cli  # Linux 툴 추천 부탁드립니다.
jwt decode $TOKEN
Token header
------------
{
  &quot;alg&quot;: &quot;RS256&quot;,
  &quot;kid&quot;: &quot;SN10I18dRCUt2qzMCIixl46dqMB6ssinwJKzuFuDDWM&quot;
}

Token claims
------------
{
  &quot;aud&quot;: [ # 이 토큰의 대상(Audience) : 토큰이 어떤 API나 서비스에서 사용될 수 있는지 정의 -&amp;gt; k8s api가 aud 가 일치하는지 검사하여 올바른 토큰인지 판단.
    &quot;https://kubernetes.default.svc.cluster.local&quot;
  ],
  &quot;exp&quot;: 1778405668, # 토큰 만료 시간 Expiration Time (Unix timestamp, 초 단위) , date -r 1778405668 =&amp;gt; (1년) Sun May 10 18:34:28 KST 2026
  &quot;iat&quot;: 1746869668, # 토큰 발급 시간 Issued At (Unix timestamp), date -r 1746869668 =&amp;gt; Sat May 10 18:34:28 KST 2025
  &quot;iss&quot;: &quot;https://kubernetes.default.svc.cluster.local&quot;, # Issuer, 토큰을 발급한 주체, k8s api가 발급
  &quot;kubernetes.io&quot;: {
    &quot;namespace&quot;: &quot;istioinaction&quot;,
    &quot;pod&quot;: {
      &quot;name&quot;: &quot;webapp-7685bcb84-hmdtl&quot;,
      &quot;uid&quot;: &quot;96cf1bee-2cdd-48cd-bd22-5fb60503bc0a&quot; # 파드 고유 식별자
    },
    &quot;serviceaccount&quot;: {
      &quot;name&quot;: &quot;webapp&quot;,
      &quot;uid&quot;: &quot;438f60f1-8d40-43b5-b8e0-c14d59081ea3&quot; # 서비스 어카운트 고유 식별자
    },
    &quot;warnafter&quot;: 1746873275 # 이 시간 이후에는 새로운 토큰을 요청하라는 Kubernetes의 신호 (토큰 자동 갱신용) date -r 1746873275 (1시간) =&amp;gt; Sat May 10 19:34:35 KST 2025
  },
  &quot;nbf&quot;: 1746869668, # Not Before, 이 시간 이전에는 토큰이 유효하지 않음. 보통 iat와 동일하게 설정됩니다.
  &quot;sub&quot;: &quot;system:serviceaccount:istioinaction:webapp&quot; # 토큰의 주체(Subject)
}

# sa 에 토큰 유효 시간 3600초 = 1시간 + 7초
kubectl get pod -n istioinaction -l app=webapp -o yaml
...
    - name: kube-api-access-nt4qb
      projected:
        defaultMode: 420
        sources:
        - serviceAccountToken:
            expirationSeconds: 3607
            path: token
...
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-2e48cb73304442bcb7eeaf9196602386&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-4d1fa31cf7704ce7b00da8e681b443be&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;파일럿 에이전트는 토큰을 디코딩하고 이 페이로드 데이터를 사용해 SPIFFE ID(예 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;spiffe://cluster.local/ns/istioinaction/sa/default&lt;/code&gt;)를 생성한다.&lt;/li&gt;
&lt;li id=&quot;block-93c14077e32643578f555bcddae2d985&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 SPIFFE ID는 CSR안에서 URI 유형의 SAN 확장으로 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1d8bcbc254a84633b416df7b931e704d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 CA로 보낸 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청&lt;/span&gt;에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;토큰과 CSR이 모두 전송&lt;/span&gt;되며, CSR에 대한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;응답으로 발급된 인증서가 반환&lt;/span&gt;된다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-aa7ce3ed0e1143be87b1b1338b4da488&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Both the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;token&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; and the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CSR&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; are sent in the request to the Istio CA to get a certificate issued for the CSR.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-ae85f17321b54c2a9bd26e95a6d5b546&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-fe1d70835d3147fba2712e9986b63e31&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;CSR에 서명하기 전에&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 이스티오 CA&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TokenReview API&lt;/span&gt;를 사용해 토큰이 쿠버네티스 API가 발급한 것이 맞는지 확인한다.&lt;/li&gt;
&lt;li id=&quot;block-e18a2c2a577145ebaad5147ae2a7cf46&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 SPIFFE 사양에서 약간 벗어난 것인데, SPIFFE 사양에서는 워크로드 엔드포인트(이스티오 에이전트)가 워크로드 증명을 수행해야 하기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-55cfdb4f823d4eda86e207e99a1e63c0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;검증을 통과하면 CSR에 서명하고, 결과 인증서가 파일럿 에이전트에 반환된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-0b6a798a2a7d4f13a35a25e51af9e88c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
kubectl api-resources | grep -i token
tokenreviews                                   authentication.k8s.io/v1               false        TokenReview

kubectl explain tokenreviews.authentication.k8s.io
...
DESCRIPTION:
     TokenReview attempts to authenticate a token to a known user. Note:
     TokenReview requests may be cached by the webhook token authenticator
     plugin in the kube-apiserver.
...

# Kubernetes API 서버에 TokenReview API 를 호출하여 토큰이 여전히 유효한지 확인 : C(Create)
## 이때 사용되는 Kubernetes API 가 POST /apis/authentication.k8s.io/v1/tokenreviews
## 즉, istiod가 이 API를 호출하려면 tokenreviews.authentication.k8s.io 리소스에 create 권한이 필요. C(Create)
kubectl rolesum istiod -n istio-system
...
&amp;bull; [CRB] */istiod-clusterrole-istio-system ⟶  [CR] */istiod-clusterrole-istio-system
  Resource                                                                                                                                             Name               Exclude    Verbs    G L W C U P D DC  
  ...
  signers.certificates.k8s.io                                                                                                             [kubernetes.io/legacy-unknown]    [-]    [approve]  ✖ ✖ ✖ ✖ ✖ ✖ ✖ ✖   
  subjectaccessreviews.authorization.k8s.io                                                                                                            [*]                  [-]       [-]     ✖ ✖ ✖ ✔ ✖ ✖ ✖ ✖   
  tokenreviews.authentication.k8s.io                                                                                                                   [*]                  [-]       [-]     ✖ ✖ ✖ ✔ ✖ ✖ ✖ ✖   
  validatingwebhookconfigurations.admissionregistration.k8s.io                                                                                         [*]                  [-]       [-]     ✔ ✔ ✔ ✖ ✔ ✖ ✖ ✖   
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-89c627ba67724bf3ac2f950b8725b7f3&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1518.69px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-3b9b917fef7a494c8b21f1e3fe7b4437&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;istiod 컨테이너 내부에서 자신의 token 으로 k8s 에 tokenreviews api 호출해보는 실습 명령어 추가해두기. (https 로 호출해야되고, k8s root ca 인증서를 지정 필요)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-d1a4f4197a464b98b9d0efe0d36575ee&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1518.69px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-4046d2fc723b4eb9a7663795c38e4768&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;istio-proxy 배포 실행 로그와 위 과정 실행 절차를 확인하는 실습 명령어 추가해두기.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-526b1500a4bb4f4fbe2732dd80373b53&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-4a2cee3dd4854331843716653a43e380&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;파일럿 에이전트는 SDS Secrets Discovery Service 를 통해 인증서와 키를 엔보이 프록시로 전달하고, 이로써 ID 부트스트랩 과정이 마무리된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-8a256038e6bd41678b2a01793e822ca6&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/b065ea2f-7c13-4c7d-a5ce-92981fb05b66/istio-a2.png?table=block&amp;amp;id=8a256038-e6bd-4167-8b2a-01793e822ca6&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=vr-gX6D66xF9CBgIFvfmgFVP0tky9zc_K0vHxEUEuGg&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;372.93489861259343&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-fef17a92407a446a9040335806fd7236&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 유닉스 도메인 소켓 listen 정보 확인
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- ss -xpl
Netid       State        Recv-Q        Send-Q                                              Local Address:Port                   Peer Address:Port       Process                                    
u_str       LISTEN       0             4096                                          etc/istio/proxy/XDS 14868651                          * 0           users:((&quot;pilot-agent&quot;,pid=1,fd=10))       
u_str       LISTEN       0             4096                 ./var/run/secrets/workload-spiffe-uds/socket 14868650                          * 0           users:((&quot;pilot-agent&quot;,pid=1,fd=9)) 

kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- ss -xp
Netid State Recv-Q Send-Q                                Local Address:Port    Peer Address:Port   Process                             
u_str ESTAB 0      0                               etc/istio/proxy/XDS 15306557            * 15309457 users:((&quot;pilot-agent&quot;,pid=1,fd=3))
u_str ESTAB 0      0      ./var/run/secrets/workload-spiffe-uds/socket 14871603            * 14872623 users:((&quot;pilot-agent&quot;,pid=1,fd=15))
...

# 유닉스 도메인 소켓 정보 확인
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- lsof -U
COMMAND   PID        USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
pilot-age   1 istio-proxy    3u  unix 0x00000000f22fa8f3      0t0 15306557 etc/istio/proxy/XDS type=STREAM # 소켓 경로 및 스트림 타입
pilot-age   1 istio-proxy   15u  unix 0x00000000a8a093ea      0t0 14871603 ./var/run/secrets/workload-spiffe-uds/socket type=STREAM # SPIFFE UDS (SPIFFE SVID 인증용)
# TYPE 파일 유형 (unix &amp;rarr; Unix Domain Socket)
## 3u &amp;rarr; 3번 디스크립터, u = 읽기/쓰기
## 15u &amp;rarr; 15번 디스크립터, u = 읽기/쓰기

# 유닉스 도메인 소켓 파일 정보 확인
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- ls -l /var/run/secrets/workload-spiffe-uds/socket
srw-rw-rw- 1 istio-proxy istio-proxy 0 May 10 08:45 /var/run/secrets/workload-spiffe-uds/socket

# istio 인증서 확인 : 
docker exec -it myk8s-control-plane istioctl proxy-config secret deploy/webapp.istioinaction
RESOURCE NAME     TYPE           STATUS     VALID CERT     SERIAL NUMBER                               NOT AFTER                NOT BEFORE
default           Cert Chain     ACTIVE     true           63745088412196707502357302102324860411      2025-05-11T08:45:40Z     2025-05-10T08:43:40Z
ROOTCA            CA             ACTIVE     true           271992264038647563728819189773953828373     2035-05-08T08:20:03Z     2025-05-10T08:20:03Z

docker exec -it myk8s-control-plane istioctl proxy-config secret deploy/webapp.istioinaction -o json
...

echo &quot;.&quot; | base64 -d  | openssl x509 -in /dev/stdin -text -noout


# istio ca 관련
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- ls -l /var/run/secrets/istio
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- openssl x509 -in /var/run/secrets/istio/root-cert.pem -text -noout

kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- ls -l /var/run/secrets/tokens
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- cat /var/run/secrets/tokens/istio-token
TOKEN=$(kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- cat /var/run/secrets/tokens/istio-token)
# 헤더 디코딩 
echo $TOKEN | cut -d '.' -f1 | base64 --decode | sed 's/$/}/' | jq
# 페이로드 디코딩
echo $TOKEN | cut -d '.' -f2 | base64 --decode | sed 's/$/&quot;}/' | jq
# (옵션) brew install jwt-cli 
jwt decode $TOKEN
Token header
------------
{
  &quot;alg&quot;: &quot;RS256&quot;,
  &quot;kid&quot;: &quot;SN10I18dRCUt2qzMCIixl46dqMB6ssinwJKzuFuDDWM&quot;
}

Token claims
------------
{
  &quot;aud&quot;: [
    &quot;istio-ca&quot; # aud가 istiod의 istio-ca(=workload api)
  ],
  &quot;exp&quot;: 1746909925,
  &quot;iat&quot;: 1746866725,
  &quot;iss&quot;: &quot;https://kubernetes.default.svc.cluster.local&quot;,
  &quot;kubernetes.io&quot;: {
    &quot;namespace&quot;: &quot;istioinaction&quot;,
    &quot;pod&quot;: {
      &quot;name&quot;: &quot;webapp-7685bcb84-hmdtl&quot;,
      &quot;uid&quot;: &quot;96cf1bee-2cdd-48cd-bd22-5fb60503bc0a&quot;
    },
    &quot;serviceaccount&quot;: {
      &quot;name&quot;: &quot;webapp&quot;,
      &quot;uid&quot;: &quot;438f60f1-8d40-43b5-b8e0-c14d59081ea3&quot;
    }
  },
  &quot;nbf&quot;: 1746866725,
  &quot;sub&quot;: &quot;system:serviceaccount:istioinaction:webapp&quot;
}

# (참고) k8s ca 관련
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- ls -l /var/run/secrets
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- ls -l /var/run/secrets/kubernetes.io/serviceaccount
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- openssl x509 -in /var/run/secrets/kubernetes.io/serviceaccount/ca.crt -text -noout
kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- cat /var/run/secrets/kubernetes.io/serviceaccount/token
TOKEN=$(kubectl exec -it -n istioinaction deploy/webapp -c istio-proxy -- cat /var/run/secrets/kubernetes.io/serviceaccount/token)
# 헤더 디코딩 
echo $TOKEN | cut -d '.' -f1 | base64 --decode | sed 's/$/}/' | jq
# 페이로드 디코딩
echo $TOKEN | cut -d '.' -f2 | base64 --decode | sed 's/$/}/' | jq
# (옵션) brew install jwt-cli 
jwt decode $TOKEN
Token header
------------
{
  &quot;alg&quot;: &quot;RS256&quot;,
  &quot;kid&quot;: &quot;SN10I18dRCUt2qzMCIixl46dqMB6ssinwJKzuFuDDWM&quot;
}

Token claims
------------
{
  &quot;aud&quot;: [
    &quot;https://kubernetes.default.svc.cluster.local&quot; # aud가 kubernetes api server
  ],
  &quot;exp&quot;: 1778408596,
  &quot;iat&quot;: 1746872596,
  &quot;iss&quot;: &quot;https://kubernetes.default.svc.cluster.local&quot;,
  &quot;kubernetes.io&quot;: {
    &quot;namespace&quot;: &quot;istioinaction&quot;,
    &quot;pod&quot;: {
      &quot;name&quot;: &quot;webapp-7685bcb84-hmdtl&quot;,
      &quot;uid&quot;: &quot;96cf1bee-2cdd-48cd-bd22-5fb60503bc0a&quot;
    },
    &quot;serviceaccount&quot;: {
      &quot;name&quot;: &quot;webapp&quot;,
      &quot;uid&quot;: &quot;438f60f1-8d40-43b5-b8e0-c14d59081ea3&quot;
    },
    &quot;warnafter&quot;: 1746876203
  },
  &quot;nbf&quot;: 1746872596,
  &quot;sub&quot;: &quot;system:serviceaccount:istioinaction:webapp&quot;
}

# (참고)
kubectl port-forward deploy/webapp -n istioinaction 15000:15000
open http://localhost:15000
curl http://localhost:15000/certs
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-2219859c022e4d4d90b42a9a24f43c5c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-e39e5679f16448d1b4befb831c6425a0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 프록시는 클라이언트에게 자신의 정체를 증명할 수 있으며 상호 인증 커넥션을 시작할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-04ed289b0dce4c98a28155e4d88f3101&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 C.5는 이 &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;과정을 간략하게 요약&lt;/span&gt;&lt;/span&gt;한 것이다.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-c0dd8e6d465b476f8ce90ae56560e090&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/4ba14116-731d-4417-bbf2-d0b1834d216b/CleanShot_2025-05-02_at_12.25.50.png?table=block&amp;amp;id=c0dd8e6d-465b-476f-8ce9-0ae56560e090&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=sbajQF9gIf3NyZmOsasVYvSkQYcu1PRDGPQehDYhZqs&quot; alt=&quot;쿠버네티스에서 이스티오로 SVID 발급하기&quot; width=&quot;864&quot; height=&quot;487.0042918454935&quot; /&gt;쿠버네티스에서 이스티오로 SVID 발급하기&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-dcd1f13baae34a3c9b68b75084dd1c53&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오 프록시 컨테이너에 서비스 어카운트 토큰이 할당된다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-b059e3d91a0a4e4db1d8cf4946adec0c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;토큰과 CSR이 istiod로 전송된다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-22823f2cd66744a2b4ea324f79731799&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod는 쿠버네티스 TokenReview API로 토큰의 유효성을 검사한다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-35e07983048b4aaf8820d405466f8ac3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;성공하면, 인증서에 서명하고 응답으로 제공한다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-d1a42a6a1b07470abe29cf913d0acd1f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;파일럿 에이전트는 엔보이 SDS를 통해 엔보이가 ID를 포함한 인증서를 사용하도록 설정한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-2df5928561504cc5a5ccf3f07308fea5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-1de9ea809aa045779772c6b81d9c5c8b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그리고 이것이 이스티오가 워크로드ID를 프로비저닝하기 위해 SPIFFE 사양을 구현하는 전체 과정이다.&lt;/li&gt;
&lt;li id=&quot;block-c7f4b2d439c745529d4d191fde053c12&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 과정은 이스티오 프록시 사이드카가 주입되는 모든 워크로드에서 자동으로 수행된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-91526ea1938e498881b5f9c91d7008fe&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/22dad260-a983-477c-ae2c-d6153e0c44eb/CleanShot_2024-10-13_at_20.00.51.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB4663TWUWSVR%2F20250510%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250510T174935Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAIaCXVzLXdlc3QtMiJIMEYCIQCYxnJaPBnoDeism3T3LiZBDQu317bbUUj7kz1j%2FjWSHQIhAMt4fFga2A5I2liiLq%2FwlrvOP%2BDRKvipT4rxAqdNa3EOKogECKv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMNjM3NDIzMTgzODA1IgwhaqFGbns%2BCEJAOt8q3APwGVyEQJP01cOkTqPlA%2BIVoWM5DSRlU3iK%2BGHCZtrHE1Ku%2F6JQqpu03fGb6lbzPfmPvH5KXpDdDiyUI6kAzF3gXgTEtX%2BGh85mSDvGP2795MmeRLZ0voc07KEOEQ8Z07HloGgkzH9ERS5k0qpk54b04cohYCSlABWd05pIF%2Bk%2BdHPvK0KP5BZRvdqcn%2B7yug%2BKX4eE7ZqnlbFBjyH0rUkEG5jlHUxJtAms%2BzL68MPlmxZiiBaBuc6eS%2Fup7OAUscBsQW7EzIi%2FWCSHY1JaQEKmvwc0%2BgJ2rayAo5ESNok3ijNveYice3xoLfoEia2%2BwF8IJJTPqd4XXNPJDLuKIOJnbcikC1GcUEZ6BO0wJSq1pFj%2BebHOd673gM3l788biKycY%2BsDpP%2Bs59%2Fg0xICohOhz0WUkAZr4RE96cJwWmi%2BDvtqF9a%2BDnuhvYqzTdtsdTBcMPlIAvgFY7ajlzsRh0M1neo2O9R1vOeEx0VL1p8WqKS7eKVaA5YFAiFczIgKPHiMW1WbzRvg4uLJD%2BCPja1IBUXpZ1cpD4S2hFfzC5ndGt%2BjNl5zKSqUZ2N3TY494cvjPUVWzLHvVJ%2F31GXwesGP63r%2FwmcOhdET4KUr6IwiemefQMuptq4rExpdfzCboP7ABjqkAUdjg5C4kv3BqtG4Ob5UBh14UwDLCiJxkHs3%2F7EBOaNJYpcKisfJJ9gNvb2nRI7Dvqxji6mqsu18f96FqW95xlMA5IDN10uJXsOGFqcKp%2B71IreYgVJk8A2PaeuLiOsgpEbYrQsO1gNqxDLTjLNSFPy07ekn1eY%2BQDrBOvJVepIRTh70e8X7gteW3BgsGbu6MphWX0Df53AFBW6ZFtYjzglh%2F9yJ&amp;amp;X-Amz-Signature=6ae2e9219455b6e03ee555b332a56c7bfa2e38083e357f396a86aed5ee6d578a&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;576&quot; height=&quot;394.7545304777595&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-b93fdc021eef4c689943e493aaf5635f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-4908ddce21a1400093ce1947cd93553d&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(참고) &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;[사전 지식]&lt;/code&gt; K8S 파드의 애플리케이션이 사용할 수 있는 인증 관련 정보 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/ko/docs/reference/access-authn-authz/service-accounts-admin/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://ssup2.github.io/blog-old/theory_analysis/Kubernetes_Authentication_Service_Account/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-59baddc4b6d44b5395c9d5a093457bf5&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://ssup2.github.io/blog-old/theory_analysis/Kubernetes_Authentication_Service_Account/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/1ef98100-60ef-4df4-be94-d01e089cadee/image.png?table=block&amp;amp;id=59baddc4-b6d4-4b53-95c9-d5a093457bf5&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=IyUEw6HOs5LfZ4Qm9xM14VHGQfWLN0QYLQh5g1k-mjA&quot; alt=&quot;https://ssup2.github.io/blog-old/theory_analysis/Kubernetes_Authentication_Service_Account/&quot; width=&quot;1056&quot; height=&quot;515.2463768115942&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-f909ccbf82334749a100e22a86f0689a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 어카운트&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;S&lt;/span&gt;ervice &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;A&lt;/span&gt;ccount&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-6808e7fed49540a09761e6fa3ce4ef16&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스어카운트(ServiceAccount)&amp;nbsp;는 파드에서 실행되는 애플리케이션 프로세스에 대한 식별자를 제공한다.&lt;/li&gt;
&lt;li id=&quot;block-001f7370f1764645b9625eeecf4c14ea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;파드 내부의 애플리케이션 프로세스는, 자신에게 부여된 서비스 어카운트의 식별자를 사용하여 클러스터의 API 서버에 인증할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-86efda638cfb48309429e680c2c2c251&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 어카운트 토큰&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;s&lt;/span&gt;ervice&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;A&lt;/span&gt;ccount&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Token&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c255187168a485fbc78d99df69ca45a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;서비스어카운트토큰(serviceAccountToken)&lt;/code&gt;&amp;nbsp;정보는 kubelet이 kube-apiserver로부터 취득한 토큰을 포함한다.&lt;/li&gt;
&lt;li id=&quot;block-846e1f89218646a5a5aa68a023abacbc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kubelet은 TokenRequest API를 통해 일정 시간 동안 사용할 수 있는 토큰을 발급 받는다.&lt;/li&gt;
&lt;li id=&quot;block-7c29b739c17e4cacb224201ad4233b71&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이렇게 취득한 토큰은 파드가 삭제되거나 지정된 수명 주기 이후에 만료된다(기본값은 1시간이다).&lt;/li&gt;
&lt;li id=&quot;block-a7ff51b125484222aa7692254513694b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 토큰은 특정한 파드에 바인딩되며 kube-apiserver를 그 대상으로 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-4960c53477ef4041b8657afcf9fb72eb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;토큰 컨트롤러&lt;/span&gt; token Controller&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-d78388bd8228487b844c83896d1878dd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;kube-controller-manager&lt;/code&gt;&amp;nbsp;의 일부로써 실행되며, 비동기적으로 동작한다.&lt;/li&gt;
&lt;li id=&quot;block-fffdb9d269774fa8ae08edae2772437a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스어카운트에 대한 삭제를 감시하고, 해당하는 모든 서비스어카운트 토큰 시크릿을 같이 삭제한다.&lt;/li&gt;
&lt;li id=&quot;block-04ddb0befadb429a96d9ca80e0174da8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스어카운트 토큰 시크릿에 대한 추가를 감시하고, 참조된 서비스어카운트가 존재하는지 확인하며, 필요한 경우 시크릿에 토큰을 추가한다.&lt;/li&gt;
&lt;li id=&quot;block-c3b9bfbc5f874b19a628afca6ccca6fb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;시크릿에 대한 삭제를 감시하고, 필요한 경우 해당 서비스어카운트에서 참조 중인 항목들을 제거한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-26c5c7e0cd7245caa70351201b2fb71b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 어카운트 어드미션 컨트롤러 S&lt;/span&gt;ervice &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;A&lt;/span&gt;ccount Admission Controller
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-88d3fa8fa8ab40138d6fa2c560282146&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;만약 해당하는 이름의 서비스어카운트가 존재하지 않는 경우, 어드미션 컨트롤러는 파드를 실행시키지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-2bae46f1069a49fd9ed825f223b126ce&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;default&lt;/code&gt;&amp;nbsp;서비스어카운트에 대해서도 동일하게 적용된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-0e32fd31ef594663a2736df4b9a84b0c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어드미션 컨트롤러는 실행하려는 파드에 API에 접근할 수 있는 토큰을 포함하는&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/ko/docs/concepts/storage/volumes/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;볼륨&lt;/a&gt;&amp;nbsp;을 추가한다.&lt;/li&gt;
&lt;li id=&quot;block-a457d7343524485d89e65ec32df39696&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어드미션 컨트롤러는 파드의 각 컨테이너에&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;volumeMount&lt;/code&gt;를 추가한다.&lt;/li&gt;
&lt;li id=&quot;block-9338725f661f4fb9a3ea1eb3f076c521&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이미&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/var/run/secrets/kubernetes.io/serviceaccount&lt;/code&gt;&amp;nbsp;경로에 볼륨이 마운트 되어있는 컨테이너에 대해서는 추가하지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-8f7d4f577ba245cf9424a7d3010c583a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;리눅스 컨테이너의 경우, 해당 볼륨은&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/var/run/secrets/kubernetes.io/serviceaccount&lt;/code&gt;&amp;nbsp;위치에 마운트된다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-9c3ed008aad64a93a9ec9b4b3e645fa4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;어드미션 컨트롤러는 파드의 생성 시점에 다음 작업들을 수행한다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-0acece83ded94254a814a749428c4bbf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;파드에&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;.spce.serviceAccountName&lt;/code&gt;&amp;nbsp;항목이 지정되지 않았다면, 어드미션 컨트롤러는 실행하려는 파드의 서비스어카운트 이름을&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;default&lt;/code&gt;로 설정한다.&lt;/li&gt;
&lt;li id=&quot;block-0c63d65a486c47da926ecd98099fcc13&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어드미션 컨트롤러는 실행되는 파드가 참조하는 서비스어카운트가 존재하는지 확인한다.&lt;/li&gt;
&lt;li id=&quot;block-b41c9d6cece8418a9f9e4e30080ebff8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스어카운트의&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;automountServiceAccountToken&lt;/code&gt;&amp;nbsp;또는 파드의&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;automountServiceAccountToken&lt;/code&gt;&amp;nbsp;중 어느 것도&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;false&lt;/code&gt;&amp;nbsp;로 설정되어 있지 않다면,&lt;/li&gt;
&lt;li id=&quot;block-c73c11e41723423fa666663bc83d9909&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;파드의 spec에&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;imagePullSecrets&lt;/code&gt;&amp;nbsp;이 없는 경우, 어드미션 컨트롤러는&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ServiceAccount&lt;/code&gt;의&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;imagePullSecrets&lt;/code&gt;을 복사하여 추가된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;li id=&quot;block-61d5d0f8f5e842309e06dbf0703798f8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TokenRequest API&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-c547ef6549ec4c4dbcc78ee9c3c4326d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스어카운트의 하위 리소스인&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/docs/reference/kubernetes-api/authentication-resources/token-request-v1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;TokenRequest&lt;/a&gt;를 사용하여 일정 시간 동안 해당 서비스어카운트에서 사용할 수 있는 토큰을 가져올 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-26262d6eaf0d4076aae17000b824f58d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨테이너 내에서 사용하기 위한 API 토큰을 얻기 위해 이 요청을 직접 호출할 필요는 없는데, kubelet이&amp;nbsp;&lt;i&gt;프로젝티드 볼륨&lt;/i&gt;&amp;nbsp;을 사용하여 이를 설정하기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-6d2909a1ce074d84a9ba494d3719686a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프로젝티드 볼륨&lt;/span&gt; Projected Volumes - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/ko/docs/concepts/storage/projected-volumes/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-a9e742251325439b94de3bea42cde48b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-ed3c51ffa7504f6eb6f60643672aa7fa&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(참고) &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Vault 사용 on K8S&lt;/code&gt; : Vault 에 시크릿 생성 및 애플리케이션에서 시크릿 가져와보기 &lt;a class=&quot;notion-link notion-page resource emoji&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline-flex; transition: background 120ms ease-in; color: inherit; align-items: center; position: relative;&quot; href=&quot;https://app.super.so/site/f01d7175-727e-4e16-a6e0-f6327b2fb696?path=1d850aec5edf809abf22fe0dc7f9d887&quot;&gt;&lt;span style=&quot;box-sizing: border-box; position: relative; display: inline-flex; align-items: center; justify-content: center; min-width: 1.3em; padding: 1px 2px; width: 20px; height: 20px; line-height: 1.6em; margin-inline-end: 0.3em; border-radius: 4px;&quot; class=&quot;notion-page__icon&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: flex; width: 20px; height: 20px; font-size: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-thickness: 1px; text-decoration-color: #e9e9e7; text-underline-offset: 2px; padding-inline-start: 0px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;Hashicorp Vault/VSO on K8S (공개)&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-f34768d721274966ab4878bb65a9c2b0&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://developer.hashicorp.com/vault/tutorials/kubernetes/agent-kubernetes&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/0a9a234d-90a5-4f44-a0ae-4a7b56f9523e/image.png?table=block&amp;amp;id=f34768d7-2127-4966-ab48-78bb65a9c2b0&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=_wNVScwS6pulCWRITSF6y3GeAHE2k4BlnFWCO2P4qZ8&quot; alt=&quot;https://developer.hashicorp.com/vault/tutorials/kubernetes/agent-kubernetes&quot; width=&quot;1200&quot; height=&quot;927.2727272727273&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p id=&quot;block-511d14b24afa4039baf403ef5b7db1c4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #458262;&quot; class=&quot;highlighted-color color-green&quot;&gt;(1) Vault 에 Secret 를 요청 처리를 위해 사전에 Role(Policy) 설정&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1f877c58b6124dd3beca1066fb3517ab&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(2) 파드 생성 시, 서비스 어카운트 토큰(JWT) 생성&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-b293c8235b1043be837d3ff92153cf20&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(3) 파드의 애플리케이션이 Vault 에 로그인 과정&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-c1b4cafb7d704753b2039fca81a10d7c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;3-1) 애플리케이션은 JWT를 전달하여 Vault 로그인 요청&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-6ba363ab81174d819b4e2f36182559da&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;3-2) Vault 는 정보 확인을 위해 K8S API 서버에 TokenReview API 호출&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-c0540653a96444f6826ab3e3fc3c9312&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;3-3) K8S API 서버는 서비스 어카운트의 이름과 네임스페이스를 반환&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-747eae9f85fc41f38d660d1b3f012786&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;3-4) Vault 는 &amp;lsquo;서비스 어카운트 이름, 네임스페이스&amp;rsquo;를 Vault 해당 시크릿에 정책과 매칭 확인&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-6f01d1402c1749609737ec4bd2ab7d4e&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;3-5) 확인 후 Vault 는 Auth Token 을 애플리케이션에게 반환&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-320748fee3e44d4f9624b57486a41ffd&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #8f64af;&quot; class=&quot;highlighted-color color-purple&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(4) 파드의 애플리케이션이 Vault 에 Secret 요청 과정&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-811d96c889004b37ab63fc86a0717cb3&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #8f64af;&quot; class=&quot;highlighted-color color-purple&quot;&gt;4-1) 애플리케이션은 (3)에서 받은 Auth Token 으로 Vault 해당 시크릿 정보를 요청&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-3b1b4fe1386941ad93fd385c1c7adba7&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #8f64af;&quot; class=&quot;highlighted-color color-purple&quot;&gt;4-2) Vault 는 Auth Token 확인 및 매칭 정책 확인&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-4ed4b5fe8f7340118f349a907b5e46ac&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #8f64af;&quot; class=&quot;highlighted-color color-purple&quot;&gt;4-3) 확인 후 Vault 는 최종적으로 해당 시크릿 정보를 반환&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-807681e1201a4b228c5b0393c9fd7cdb&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1546.67px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-a304895d90a24ad3b3d7008099e3b660&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;Vault 에서 k8s-auth 인증은 아래 VSO에서도 활용됨. 참고로 AWS EKS에 aws-auth 인증/인가 시에도 유사한 과정을 사용. &lt;/i&gt;&lt;a class=&quot;notion-link notion-page resource emoji&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline-flex; transition: background 120ms ease-in; color: inherit; align-items: center; position: relative;&quot; href=&quot;https://app.super.so/site/f01d7175-727e-4e16-a6e0-f6327b2fb696?path=dd9dce3defb642bd91aceb29c495304e&quot;&gt;&lt;span style=&quot;box-sizing: border-box; position: relative; display: inline-flex; align-items: center; justify-content: center; min-width: 1.3em; padding: 1px 2px; width: 20px; height: 20px; line-height: 1.6em; margin-inline-end: 0.3em; border-radius: 4px;&quot; class=&quot;notion-page__icon&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: flex; width: 20px; height: 20px; font-size: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-thickness: 1px; text-decoration-color: #e9e9e7; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;[NEW] AWS EKS Access Mgmt &amp;amp; Pod Identity&lt;/span&gt;&lt;/a&gt;&lt;i&gt; &lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-09aaa723129a4576b77c08064d08837d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380708295e94e71475695&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;C.3 요청 ID 이해하기&lt;/span&gt; Understanding request identity&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380a49291f6c5d99ff8bf&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;들어가며 : &lt;/span&gt;필터 메타데이터 - Principal, Namespace, Request principal, Request authentication claims&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1efb8b2c1c238089a3ecd75bc3d2d380&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/614f2085-f5cd-4bdc-b424-a6db09660c74/CleanShot_2025-05-04_at_18.12.52.png?table=block&amp;amp;id=1efb8b2c-1c23-8047-94a7-d7057d00c58d&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=aJC2PbQR7g9QYIbwPK8sIALxGIRUauJtc9DVrhEnsls&quot; alt=&quot;필터 메타데이터에서 검증된 데이터 수집&quot; width=&quot;696.960205078125&quot; height=&quot;329.9811587887823&quot; /&gt;필터 메타데이터에서 검증된 데이터 수집&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23808cb0b8cfdf2e03790b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/f2610f54-fcef-45c2-add0-b3e302597718/CleanShot_2025-05-01_at_15.31.03.png?table=block&amp;amp;id=1efb8b2c-1c23-80e2-b7c5-dec486dd70d7&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=oi4eiTzKuE3LRug7hO34f15sChaNut5qbLe7GVwDrNU&quot; alt=&quot;요청을 인증 및 인가하도록 서비스 프록시를 구성하는 리소스&quot; width=&quot;720&quot; height=&quot;542.9508196721312&quot; /&gt;요청을 인증 및 인가하도록 서비스 프록시를 구성하는 리소스&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238045a374dc8618a6645e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청 ID&lt;/span&gt;는 요청의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터 메타데이터&lt;/span&gt;에&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 저장된 값&lt;/span&gt;으로 표현된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Request identity&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; is represented by the values stored in the&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; filter metadata o&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;f the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;request&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238031af15f8b4e181fd11&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 필터 메타데이터에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;JWT&lt;/span&gt;나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;피어 인증서&lt;/span&gt;에서 추출한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;사실&lt;/span&gt; 또는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클레임&lt;/span&gt;이 포함돼 있으므로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;신뢰&lt;/span&gt;할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This filter metadata contains &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;facts&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; or &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;claims&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; that were extracted from either the&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; JWT&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; or the&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; peer certificate&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; and therefore can be trusted.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ddbf2be4d54a781cf5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;9장에서는 JWT의 정보를 검증하기 위해 필요한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RequestAuthentication&lt;/span&gt; 리소스를 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23807bba30f0d4497ce639&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마찬가지로 클라이언트 워크로드 정보(워크로드의 네임스페이스 등)를 인증하려면 워크로드들이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;상호 인증&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; mutually authenticate&lt;/span&gt; 해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23804f87cae91f52d6149a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PeerAuthentication&lt;/span&gt; 리소스는 워크로드가 상호 인증만 사용하도록 강제 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;only mutual authentication&lt;/span&gt; 할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380a18ab7e15f00338fef&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238019a7a0defe17ef5a16&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;JWT를 검증&lt;/span&gt;하거나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드가 상호 인증&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;마치면&lt;/span&gt;, 여기에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;포함된 정보&lt;/span&gt;가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터 메타데이터로 저장&lt;/span&gt;된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238081ae04dde83defff6f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;필터 메타데이터에 저장되는 정보 중 일부는 다음과 같다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23808eb76ce164930c5c5c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Principal&lt;/span&gt; 주체 : PeerAuthentication 에서 정의한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;워크로드 ID&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238067a2fdd27b49fb13e1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Namespace&lt;/span&gt; 네임스페이스 : PeerAuthentication 에서 정의한 워크로드 네임스페이스&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380599d3bc38abee0ab02&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Request principal&lt;/span&gt; 요청 주체 : RequestAuthentication에서 정의한 최종 사용자 요청 주체 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The end-user request principal defined by the RequestAuthentication.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238074bb2dd0de7bda595b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Request authentication claims&lt;/span&gt; 요청 인증 클레임 : 최종 사용자 토큰에서 추출한 최종 사용자 클레임 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The end-user claims extracted from the end-user token.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23800394daf8619407ea2e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c23809488b6c625d9157d65&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;수집된 메타데이터를 관찰하고자 서비스 프록시가 이를 표준 출력에 기록하도록 설정할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380b39e79c363129ba0ce&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23806994f2cdc8ea9165b9&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;C.3.1 RequestAuthentication 리소스로 수집한 메타데이터&lt;/span&gt; Metadata collected by the RequestAuthentication resource &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23802896c9ebb546885085&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본적으로 엔보이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;rbac 로거&lt;/span&gt;는 메타데이터를 로그에 출력하지 않는다. 따라서 출력하려면 로깅 수준의 debug로 설정해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380a98cc2c328d82129f9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;docker exec -it myk8s-control-plane istioctl proxy-config log deploy/istio-ingressgateway -n istio-system --level rbac:debug
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380a690b0fd876b8bcc31&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238093b7c2debc6d85bbcc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음으로, 사용할 서비스가 몇 가지 필요하다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380309f65dd7060cfdadb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습 중 자주 사용하는 실습 환경 초기화 후 워크로드로 트래픽을 라우팅하도록 인그레스 게이트웨이를 설정하기만 하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380c38c23d71e2e47b0c7&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;kubectl apply -f services/catalog/kubernetes/catalog.yaml -n istioinaction
kubectl apply -f services/webapp/kubernetes/webapp.yaml -n istioinaction
kubectl apply -f services/webapp/istio/webapp-catalog-gw-vs.yaml -n istioinaction&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380febab4fafa58f9588f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c991e5da831d18799c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이어서 필터 메타데이터를 사용하는 RequestAuthentication 리소스와 AuthorizationPolicy 를 만든다&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380878c7bf4f329baabae&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# end-user authentication을 위한 RequestAuthentication 생성
# jwtRules에 맞는 issuer와 jwks값에 대해서 인증
kubectl apply -f ch9/enduser/jwt-token-request-authn.yaml

# :30000 포트 추가 필요, 아래 실습 설정 참고.
# requestPrincipals: [&quot;auth@istioinaction.io/*&quot;]에 맞는 jwt로 요청하면 webapp에 Get요청을 허용하겠다는 의미
cat ch9/enduser/allow-all-with-jwt-to-webapp.yaml 
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-all-with-jwt-to-webapp
  namespace: istio-system
spec:
  selector:
    matchLabels:
      app: istio-ingressgateway
  action: ALLOW
  rules:
  - from:
    - source:
        requestPrincipals: [&quot;auth@istioinaction.io/*&quot;]
    to:
    - operation:
        hosts: [&quot;webapp.istioinaction.io:30000&quot;]
        methods: [&quot;GET&quot;]

kubectl apply -f ch9/enduser/allow-all-with-jwt-to-webapp.yaml

kubectl get requestauthentication,authorizationpolicy -A
NAMESPACE      NAME                                                              AGE
istio-system   requestauthentication.security.istio.io/jwt-token-request-authn   7s

NAMESPACE      NAME                                                                 AGE
istio-system   authorizationpolicy.security.istio.io/allow-all-with-jwt-to-webapp   3s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23805a97b5ef53b757c0de&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238066b4bad9c2809e0104&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;admin 토큰을 사용하는 요청을 해보자. 인그레스 게이트웨이에 로그를 남길 것이다&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238098bc9de5fad7057fb8&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# admin 토큰을 사용하는 요청 : 필터 메타데이터 확인
ADMIN_TOKEN=$(&amp;lt; ch9/enduser/admin.jwt)

jwt decode $ADMIN_TOKEN                       

Token header
------------
{
  &quot;typ&quot;: &quot;JWT&quot;,
  &quot;alg&quot;: &quot;RS256&quot;,
  &quot;kid&quot;: &quot;CU-ADJJEbH9bXl0tpsQWYuo4EwlkxFUHbeJ4ckkakCM&quot;
}

Token claims
------------
{
  &quot;exp&quot;: 4745145071,
  &quot;group&quot;: &quot;admin&quot;,
  &quot;iat&quot;: 1591545071,
  &quot;iss&quot;: &quot;auth@istioinaction.io&quot;,
  &quot;sub&quot;: &quot;218d3fb9-4628-4d20-943c-124281c80e7b&quot;
}

# 요청 without ADMIN_TOKEN
curl \                                        
     -sSl -o /dev/null -w &quot;%{http_code}\n&quot; webapp.istioinaction.io:30000/api/catalog
403

# 로깅
kubectl logs -n istio-system -l app=istio-ingressgateway -f

[2025-05-10T10:59:45.441Z] &quot;GET /api/catalog HTTP/1.1&quot; 403 - rbac_access_denied_matched_policy[none] - &quot;-&quot; 0 19 0 - &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;7443a756-5c57-97e7-9f32-50b353dd1cbd&quot; &quot;webapp.istioinaction.io:30000&quot; &quot;-&quot; outbound|80||webapp.istioinaction.svc.cluster.local - 10.10.0.6:8080 192.168.65.1:34638 - -

# 요청 with ADMIN_TOKEN
curl -H &quot;Authorization: Bearer $ADMIN_TOKEN&quot; \
     -sSl -o /dev/null -w &quot;%{http_code}\n&quot; webapp.istioinaction.io:30000/api/catalog
200

# 로깅
kubectl logs -n istio-system -l app=istio-ingressgateway -f

...
# filter metadata에 jwt 값이 저장된다.
# iss가 auth@istioinaction.io이므로 authentication되고 authorizationPolicy에 의해서 webapp GET 요청이 authorization되어 200 return
dynamicMetadata: filter_metadata {
  key: &quot;envoy.filters.http.jwt_authn&quot;
  value {
    fields {
      key: &quot;auth@istioinaction.io&quot;
      value {
        struct_value {
          fields {
            key: &quot;exp&quot;
            value {
              number_value: 4745145071
            }
          }
          fields {
            key: &quot;group&quot;
            value {
              string_value: &quot;admin&quot;
            }
          }
          fields {
            key: &quot;iat&quot;
            value {
              number_value: 1591545071
            }
          }
          fields {
            key: &quot;iss&quot;
            value {
              string_value: &quot;auth@istioinaction.io&quot;
            }
          }
          fields {
            key: &quot;sub&quot;
            value {
              string_value: &quot;218d3fb9-4628-4d20-943c-124281c80e7b&quot;
            }
          }
        }
      }
    }
  }
}
filter_metadata {
  key: &quot;istio_authn&quot;
  value {
    fields {
      key: &quot;request.auth.claims&quot;
      value {
        struct_value {
          fields {
            key: &quot;group&quot;
            value {
              list_value {
                values {
                  string_value: &quot;admin&quot;
                }
              }
            }
          }
          fields {
            key: &quot;iss&quot;
            value {
              list_value {
                values {
                  string_value: &quot;auth@istioinaction.io&quot;
                }
              }
            }
          }
          fields {
            key: &quot;sub&quot;
            value {
              list_value {
                values {
                  string_value: &quot;218d3fb9-4628-4d20-943c-124281c80e7b&quot;
                }
              }
            }
          }
        }
      }
    }
    fields {
      key: &quot;request.auth.principal&quot;
      value {
        string_value: &quot;auth@istioinaction.io/218d3fb9-4628-4d20-943c-124281c80e7b&quot;
      }
    }
    fields {
      key: &quot;request.auth.raw_claims&quot;
      value {
        string_value: &quot;{\&quot;iss\&quot;:\&quot;auth@istioinaction.io\&quot;,\&quot;exp\&quot;:4745145071,\&quot;group\&quot;:\&quot;admin\&quot;,\&quot;iat\&quot;:1591545071,\&quot;sub\&quot;:\&quot;218d3fb9-4628-4d20-943c-124281c80e7b\&quot;}&quot;
      }
    }
  }
}
        thread=31
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380efbc42d3c3a86052d4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238008bf2cff14e551e461&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;출력은 RequestAuthentication 필터가 최종 사용자 토큰의 클레임을 검증했고, 클레임을 필터 메타데이터로 저장했다는 것을 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c2b119dfe93d656680&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 정책들은 이 필터 메타데이터를 기반으로 작동할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380e59232e12a8f18ffd7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23808e85b0c1c231f3bf9c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다음 실습을 위해 RequestAuthentication, AuthorizationPolicy 삭제&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380fc8c53ff9cc0460186&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;kubectl delete -f ch9/enduser/jwt-token-request-authn.yaml
kubectl delete -f ch9/enduser/allow-all-with-jwt-to-webapp.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380709e10f1e556d9804b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d6a318dd961a68beba&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;C.3.2 한 요청의 대략적인 흐름*&lt;/span&gt;&lt;/span&gt; Overview of the flow of one request&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238014b0d9d5836614a629&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드가 목적지인 요청은 모두 다음 필터를 거친다 (그림 C.6 참조)&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23808a9f2fd4a088afc38b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/614f2085-f5cd-4bdc-b424-a6db09660c74/CleanShot_2025-05-04_at_18.12.52.png?table=block&amp;amp;id=1efb8b2c-1c23-8047-94a7-d7057d00c58d&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=aJC2PbQR7g9QYIbwPK8sIALxGIRUauJtc9DVrhEnsls&quot; alt=&quot;필터 메타데이터에서 검증된 데이터 수집&quot; width=&quot;696.960205078125&quot; height=&quot;329.9811587887823&quot; /&gt;필터 메타데이터에서 검증된 데이터 수집&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380adacf5e2ed04b14b2f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/f2610f54-fcef-45c2-add0-b3e302597718/CleanShot_2025-05-01_at_15.31.03.png?table=block&amp;amp;id=1efb8b2c-1c23-80e2-b7c5-dec486dd70d7&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=oi4eiTzKuE3LRug7hO34f15sChaNut5qbLe7GVwDrNU&quot; alt=&quot;요청을 인증 및 인가하도록 서비스 프록시를 구성하는 리소스&quot; width=&quot;720&quot; height=&quot;542.9508196721312&quot; /&gt;요청을 인증 및 인가하도록 서비스 프록시를 구성하는 리소스&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b39383d56426b0da32&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;JWT authentication filter &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;인증&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 필터&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23802a91cadd70b6201a7a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인증 정책의 JWT 사양에 따라(=RequestAuthentication의 정의) JWT의 유효성을 검사하고 인증 클레임과 커스텀 클레임 같은 클레임을 추출해 필터 메타데이터로 저장하는 엔보이 필터 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;An Envoy filter that does JWT validation based on the JWT specification in authentication policies and extracts claims such as the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;authentication claims&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; and custom claims, which are &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;stored as filter metadata.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c23809cb7b1fb1a828cb5eb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PeerAuthentication filter 피어&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;인증&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 필터&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23800c8807c4caf72c768e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 인증 요구 사항을 강제하고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증된 속성&lt;/span&gt;(소스 네임스페이스나 주체 같은 피어 ID)을 추출하는 엔보이 필터 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;An Envoy filter that enforces service authentication requirements and extracts&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; authenticated attributes&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; (peer identity such as source namespace and &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;principal&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;).&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d8b643d0297df1b3c2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Authorization filter &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;인가&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 필터&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380528645e445bd087e27&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞선 필터들이 수집한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터 메타데이터를 확인&lt;/span&gt;하고 워크로드에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;적용된 정책(AuthorizationPolicy)&lt;/span&gt;에 따라 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청에 권한을 부여하는 인가 엔진&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;authorization engine&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; that &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;checks&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; the f&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ilter metadata c&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;ollected by the previous filters and authorizes the request based on the policies applied to the workload.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1efb8b2c1c2380768162d236d4bfa72d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23805cb6d7e2e27c7209cd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;webapp 서비스에 도달해야 하는 요청의 시나리오를 살펴보자.
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380dba6fae98c061d4311&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 필터는 토큰에서 클레임을 추출해 필터 메타데이터에 저장한다. 이로써 요청에 ID가 주어진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23808f8ccae3b4076dec44&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;피어 간 인증 필터는 클라이언트의 ID 데이터를 추출해 필터 메타데이터에 저장한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380109efff118bb31ad9c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Custom authorization filters &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;커스텀 인가 &lt;/span&gt;필터들 : 요청을 허용하거나 거부할지 추가로 평가한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Reject or allow further evaluation of the request.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238050a8d4ebfd8e222296&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Deny authorization filters &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;거부 인가&lt;/span&gt; 필터들 : 요청을 허용하거나 거부할지 추가로 평가한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23802ba378edca99504964&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Allow authorization filters &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;허용 인&lt;/span&gt;가 필터들 : 필터 조건에 맞으면 요청을 허용한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Allow the request if the filter matches.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b2809ac126991ec171&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Last (catch-all) authorization filter &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;마지막 (포괄적) 인가&lt;/span&gt; 필터 : 앞서 요청을 처리한 필터가 없는 경우에만 실행된다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Executed only if no prior filter has handled the request.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e090f4d4022db3ea1f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;이 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;JWT 인증 필터&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;를 통과한다.&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The request passes the JWT authentication filter &amp;rArr; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; RequestAuthentication resource 정의에 의해 수행&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380dfbfdeccfd99d1f6a0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;인그레스 게이트웨이와 webapp 간에&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 피어 간 인증&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;이 수행된다. &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rArr; PeerAuthentication resource 정의에 의해 수행&lt;/span&gt;&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Peer-to-peer authentication is performed between the ingress gateway and the webapp.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c08e3fee9ff83c2161&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가 필터&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;는 다음 순서대로 실행된다.&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Authorization filters are executed in order &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rArr; AuthorizationPolicy 정의에 의해 수행&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380dc9623c31beab0405d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-1efb8b2c1c23805c976eccba432e8da2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이것이 webapp 서비스로 향하는 요청이 인증되고 인가되는 방식이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;And that&amp;rsquo;s how the request is authenticated and authorized for the request to get to the webapp service.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23805ea9d7d869d28943b8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380eaa02ae1eecf8025ba&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380b980a5c3d8a9c5b9c4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380ac950de6d73b441a0a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1efb8b2c1c2380c985d9f737b6d94331&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;9.3. 서비스 간 트래픽 인가하기&lt;/p&gt;
&lt;p id=&quot;block-1efb8b2c1c23807b9517df060f74d625&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://netpple.github.io/docs/istio-in-action/Istio-ch9-securing-3-authorizing&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://netpple.github.io/docs/istio-in-action/Istio-ch9-securing-3-authorizing&lt;/a&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f3af26f8b88357da43&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;[&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;ssup2]&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &lt;/span&gt;&lt;/span&gt;Istio Authorization Policy - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://ssup2.github.io/blog-software/docs/theory-analysis/istio-authorization-policy/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23800486f2dfaf546dd3f9&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : Understanding request identity&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380289734e886c799c1b9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가&lt;/span&gt;란 인증된 주체가 리소스 접근, 편집, 삭제 같은 작업을 수행하도록 허용됐는지 정의하는 절차다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23800db497cbe8913a533b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;정책은 인증된 주체(&amp;rsquo;누가&amp;rsquo;)와 인가(&amp;rsquo;무엇&amp;rsquo;)를 결합해 형성되며, 누가 무슨 일을 할 수 있는지 정의한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23803aaacfc9489e32ec0c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ce82a9c84e450352fa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AuthorizationPolicy&lt;/span&gt; 리소스가 있는데, 이 리소스는 서비스 메시에 메시 범위, 네임스페이스 범위, 워크로드별 접근 정책을 정의하는 선언전 API이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e6871eee8bb7cb70fd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 9.9는 특정 ID가 뚫렸을 때 접근 정책이 어떻게 접근 범위나 폭팔 반경을 제한하는지 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23807fbb9cc8e26a5ad11d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/baf37f8e-16ad-41c2-aad1-c8fea0441b76/CleanShot_2025-05-03_at_18.08.01.png?table=block&amp;amp;id=1efb8b2c-1c23-807f-bb9c-c8e26a5ad11d&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=bhXeHsnYMNXEh_IBI-DiwAX2d_-ZGDLUbEJws7SymW4&quot; alt=&quot;인가는 공격 범위를 단지 도난당한 ID가 접근할 수 있는 것으로 축소한다.&quot; width=&quot;768&quot; height=&quot;461.4193548387097&quot; /&gt;인가는 공격 범위를 단지 도난당한 ID가 접근할 수 있는 것으로 축소한다.&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380a09311eb7dc1de22c1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23804ca28ccec6cc015a43&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인가 정책을 살펴보기 전에 이스티오에서 인가를 어떻게 구현하는지 먼저 이해하면 좋다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c1966ff923aa0aa06d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 절에서 기초를 빠르게 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380f19c2dd9fb21b9767b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380eaa018f761870a7687&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.3.1 이스티오에서 인가 이해하기&lt;/span&gt; : AuthorizationPolicy - selector, rules(from, to, when), action&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1efb8b2c1c238066ad01d2ddf7d97bad&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/614f2085-f5cd-4bdc-b424-a6db09660c74/CleanShot_2025-05-04_at_18.12.52.png?table=block&amp;amp;id=1efb8b2c-1c23-8047-94a7-d7057d00c58d&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=aJC2PbQR7g9QYIbwPK8sIALxGIRUauJtc9DVrhEnsls&quot; alt=&quot;부록 C.6 필터 메타데이터에서 검증된 데이터 수집&quot; width=&quot;696.960205078125&quot; height=&quot;329.9811587887823&quot; /&gt;부록 C.6 필터 메타데이터에서 검증된 데이터 수집&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380fdbd6cc5827d426a62&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/f2610f54-fcef-45c2-add0-b3e302597718/CleanShot_2025-05-01_at_15.31.03.png?table=block&amp;amp;id=1efb8b2c-1c23-80e2-b7c5-dec486dd70d7&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=oi4eiTzKuE3LRug7hO34f15sChaNut5qbLe7GVwDrNU&quot; alt=&quot;요청을 인증 및 인가하도록 서비스 프록시를 구성하는 리소스&quot; width=&quot;720&quot; height=&quot;542.9508196721312&quot; /&gt;요청을 인증 및 인가하도록 서비스 프록시를 구성하는 리소스&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238082b9e7c61b7cbfdd0c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238009b3f9d4fb36543166&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;각 서비스와 함께 배포되는 서비스 프록시가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가&lt;/span&gt; 또는 집행 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;enforcement&lt;/span&gt; 엔진이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380dbadd9e09d3f809c8d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 프록시&lt;/span&gt;가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청을 거절하거나 허용&lt;/span&gt;할지 여부를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;판단&lt;/span&gt;하기 위한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;정책을 모두 포함&lt;/span&gt;하고 있기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c8ab5ed6e63e9d8ff7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러므로 이스티오의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;접근 제어&lt;/span&gt;는 대단히 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;효율적이다&lt;/span&gt;. 모든 결정이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프록시에서 직접 내려지기 때문&lt;/span&gt;이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238056956ad7e5691174de&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AuthorizationPolicy&lt;/span&gt; 리소스로 설정하는데, 이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;리소스가 정책을 정의&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b59118e4c1f3dc966c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예시 AuthorizationPolicy 정의는 다음과 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380169906c0043742052b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# cat ch9/allow-catalog-requests-in-web-app.yaml
apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;AuthorizationPolicy&quot;
metadata:
  name: &quot;allow-catalog-requests-in-web-app&quot;
  namespace: istioinaction
spec:
  selector:
    matchLabels:
      app: webapp
  rules:
  - to:
    - operation:
        paths: [&quot;/api/catalog*&quot;]
  action: ALLOW&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23802c9ca0fa0a85e07909&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23806db1a4faee262bb4d5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istiod가 새 AuthorizationPolicy 가 클러스터에 적용됐음을 확인하면, 다른 이스티오 리소스들처럼 해당 리소스로 데이터 플레인 프록시를 처리하고 업데이트 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23809e8c67cf33d033ea8a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;설정의 각 부분을 아직 이해하지 못한다고 걱정하지 말자. 다음 절에서 자세히 살펴볼 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380619ce5c499ae26733e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238031a12ce4645ea0ee5b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;인가 정책의 속성&lt;/u&gt;&lt;/span&gt; PROPERTIES OF AN AUTHORIZATION POLICY&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380cdb6b7ed6f85f14ef6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;AuthorizationPolicy 리소스 사양에서 정책을 설정하고 정의하는 필드는 세 가지다.
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c9b57cd9b5eaa7b814&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;action은 규칙 중 하나가 요청과 일치하는 경우에만 적용된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380bcb4d3d058937251ce&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;selector&lt;/span&gt; 필드는 정책을 적용할 워크로드 부분집합을 정의한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23806f824cefd56ee4474e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;action&lt;/span&gt; 필드는 이 정책이 허용(ALLOW)인지, 거부(DENY)인지, 커스텀(CUSTOM)인지 지정한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ee992eff5f04ba6cd9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;rules&lt;/span&gt; 필드는 정책을 활성화할 요청을 식별하는 규칙 목록을 정의한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c2380fcbfcceb4db11616d7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;rules 속성은 좀 더 복잡해서 더 깊이 살펴봐야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380b1a4fcd76ad0f0f675&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238074ab94e9769b882e70&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;인가 정책 규칙 이해하기&lt;/u&gt;&lt;/span&gt; UNDERSTANDING AUTHORIZATION POLICY RULES&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23803cb6b9c4bc6683b9bf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인가 정책 규칙은 커넥션은 출처 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;source&lt;/span&gt; 를 지정하며, 일치해야 규칙을 활성화하는 작업 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;operation&lt;/span&gt; 조건을 (원한다면) 지정할 수도 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c6a336d57ead97e25b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Authorization policy rules specify the source of the connection and (optionally) the operation that, when matched, activates the rule.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d1ae83c3f1ef48cb10&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인가 정책은 규칙 중 하나의 출처와 작업 조건을 모두 만족시키는 경우에만 집행된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23808c8165c9e26076ce9a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 경우에만 정책이 활성화되고, 커넥션은 action 속성에 따라 허용되거나 거부된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380fa9e8ecbbfa20fdf85&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23803daa3feef538b73f29&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;단일 규칙의 필드는 다음과 같다. &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The fields of a single rule are as follows:&lt;/span&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23805c92e8e26655324ad6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;principals&lt;/span&gt; : 출처 ID(mTLS 예제에서 볼 수 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SPIFFE ID&lt;/span&gt;). 요청이 주체 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;principal&lt;/span&gt; 집합에서 온 것이 아니면 부정 속성인 notprincipals 가 적용된다. 이 기능이 작동하려면 서비스가 상호 인증해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23809286f9eef80217fef6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;namespaces&lt;/span&gt; : 출처 네임스페이스와 비교할 네임스페이스 목록. 출처 네임스페이스는 참가자의 SVID에서 가져온다. 이런 이유로, 작동하려면 mTLS가 활성화돼야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238056bcdcd711eeda346b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ipBlocks&lt;/span&gt; : 출처 IP 주소와 비교할 단일 IP 주소나 CIDR 범위 목록.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380289e3dee081248e797&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;from&lt;/span&gt; 필드는 요청의 출처 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;source&lt;/span&gt; 를 다음 유형 중 하나로 지정한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380749f69c6719d98fcb6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;to&lt;/span&gt; 필드는 요청의 작업을 지정하며, 호스트나 요청의 메서드 등이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380499977dba93ab2ff97&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;when&lt;/span&gt; 필드는 규칙이 부합한 후 충족해야 하는 조건 목록을 지정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d6ad93cb0b7f3ef5c3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;공식 문서 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/reference/config/security/authorization-policy/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://istio.io/latest/docs/reference/config/security/authorization-policy/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23805b9228c9e2406f6289&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.3.2 작업 공간 설정하기&lt;/span&gt; : 실습 환경 구성 확인 &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습~)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238025a6fedfef744c3207&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습 환경 구성 : 9.2에서 이미 배포함&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23800ba928db984406b2f0&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 9.2.1 에서 이미 배포함
kubectl -n istioinaction apply -f services/catalog/kubernetes/catalog.yaml
kubectl -n istioinaction apply -f services/webapp/kubernetes/webapp.yaml
kubectl -n istioinaction apply -f services/webapp/istio/webapp-catalog-gw-vs.yaml
kubectl -n default apply -f ch9/sleep.yaml

# gw,vs 확인 
kubectl -n istioinaction get gw,vs


# PeerAuthentication 설정 : 앞에서 이미 설정함
cat ch9/meshwide-strict-peer-authn.yaml
apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;PeerAuthentication&quot;
metadata:
  name: &quot;default&quot;
  namespace: &quot;istio-system&quot;
spec:
  mtls:
    mode: STRICT
    
kubectl -n istio-system apply -f ch9/meshwide-strict-peer-authn.yaml
kubectl get peerauthentication -n istio-system
NAME      MODE     AGE
default   STRICT   5h29m

cat ch9/workload-permissive-peer-authn.yaml
apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;PeerAuthentication&quot;
metadata:
  name: &quot;webapp&quot;
  namespace: &quot;istioinaction&quot;
spec:
  selector:
    matchLabels:
      app: webapp 
  mtls:
    mode: PERMISSIVE

kubectl -n istioinaction apply -f ch9/workload-permissive-peer-authn.yaml
kubectl get peerauthentication -n istioinaction
gylee@GYLEEui-Macmini book-source-code-master % kubectl get peerauthentication -n istioinaction
NAME     MODE         AGE
webapp   PERMISSIVE   5h18m&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380ce8113e5930f9ac959&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/ee8a531c-c27c-4886-84b5-4b4ba1acf4c7/CleanShot_2025-05-01_at_18.32.34.png?table=block&amp;amp;id=1efb8b2c-1c23-80f1-94a3-dc1f35e2f4bb&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=4AYLbPAPG9s1HoFPriOl-yoTCJyL9jYMEtpkR8cYTUg&quot; alt=&quot;webapp은 HTTP 트래픽을 받아들인다. catalog 서비스에는 상호 인증이 필요하다.&quot; width=&quot;816&quot; height=&quot;625.1782945736434&quot; /&gt;webapp은 HTTP 트래픽을 받아들인다. catalog 서비스에는 상호 인증이 필요하다.&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23801f964be7682f77fa44&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23800aad83f5f5ce8dd5f0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;실습 환경 요약&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380489dbec7755a8cf1f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;sleep 워크로드는 default 네임스페이스에 배포했고, 평문 HTTP 요청을 만드는 데 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ab81fac9ab44ca7dc3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;webapp 워크로드는 istioinaction 네임스페이스에 배포했고, default 네임스페이스에 있는 워크로드에서 미인증 요청을 받아들이고 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380869ffcfd4fd514bdeb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;catalog 워크로드는 istioinaction 네임스페이스에 배포했고, 같은 네임스페이스의 인증된 워크로드로부터만 요청을 받아들이고 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380308a57c79ae3c5f3fd&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.3.3 워크로드에 정책 적용 시 동작 확인&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380cc8f04d9c890a03078&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;세부 사항으로 들어가기 전에 미리 알아둬야 할 것이 있다. 문제가 발생하기 쉽기 때문이다 (그리고 디버깅에 시간이 많이 낭비된다!).&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23806fa0ecce593638d6b9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Before we go into the details, there is one &quot;gotcha&quot; that you should know up front, as it&amp;rsquo;s easy to get bitten by (and waste many hours of debugging!)&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c238068874df074f5d92872&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드에 하나 이상의 ALLOW 인가 정책이 적용되면, 모든 트래픽에서 해당&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 워크로드로의 접근은 기본적으로 거부&lt;/span&gt;된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f6b18bc0cd8a621c14&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽을 받아들이려면, ALLOW 정책이 최소 하나는 부합해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380398de7eae85d28f3b2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23805bb905da00c26673a4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 설명해보자.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b0a687dbcb86a24d11&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 AuthorizationPolicy 리소스는 webapp 으로의 요청 중 HTTP 경로에 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/api/catalog*&lt;/code&gt; 가 포함된 것을 허용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380778b54fec2305602d2&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# cat ch9/allow-catalog-requests-in-web-app.yaml
apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;AuthorizationPolicy&quot;
metadata:
  name: &quot;allow-catalog-requests-in-web-app&quot;
  namespace: istioinaction
spec:
  selector:
    matchLabels:
      app: webapp # 워크로드용 셀렉터 Selector for workloads -&amp;gt; webapp이라는 service가 하나의 workloads가 된다.
  rules:
  - to:
    - operation:
        paths: [&quot;/api/catalog*&quot;] # 요청을 경로 /api/catalog 와 비교한다 Matches requests with the path /api/catalog
  action: ALLOW # 일치하면 허용한다 If a match, ALLOW&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380e2a97cd3d56ec014b9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380fca8b0ef1e21faef92&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;적용 후 확인&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238004bd1ce2dc02b4cb78&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 로그
kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f

# 적용 전 확인 
kubectl exec deploy/sleep -- curl -sSL webapp.istioinaction/api/catalog
kubectl exec deploy/sleep -- curl -sSL webapp.istioinaction/hello/world # 404 리턴

# AuthorizationPolicy 리소스 적용
kubectl apply -f ch9/allow-catalog-requests-in-web-app.yaml

kubectl get authorizationpolicy -n istioinaction
NAME                                AGE
allow-catalog-requests-in-web-app   4s

# 
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/webapp.istioinaction --port 15006
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/webapp.istioinaction --port 15006 -o json &amp;gt; webapp-listener.json
...
          {
              &quot;name&quot;: &quot;envoy.filters.http.rbac&quot;,
              &quot;typedConfig&quot;: {
                  &quot;@type&quot;: &quot;type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC&quot;,
                  &quot;rules&quot;: {
                      &quot;policies&quot;: {
                          &quot;ns[istioinaction]-policy[allow-catalog-requests-in-web-app]-rule[0]&quot;: {
                              &quot;permissions&quot;: [
                                  {
                                      &quot;andRules&quot;: {
                                          &quot;rules&quot;: [
                                              {
                                                  &quot;orRules&quot;: {
                                                      &quot;rules&quot;: [
                                                          {
                                                              &quot;urlPath&quot;: {
                                                                  &quot;path&quot;: {
                                                                      &quot;prefix&quot;: &quot;/api/catalog&quot;
                                                                  }
                                                              }
                                                          }
                                                      ]
                                                  }
                                              }
                                          ]
                                      }
                                  }
                              ],
                              &quot;principals&quot;: [
                                  {
                                      &quot;andIds&quot;: {
                                          &quot;ids&quot;: [
                                              {
                                                  &quot;any&quot;: true
                                              }
                                          ]
                                      }
                                  }
                              ]
                          }
                      }
                  },
                  &quot;shadowRulesStatPrefix&quot;: &quot;istio_dry_run_allow_&quot; #  실제로 차단하지 않고, 정책이 적용됐을 때 통계만 수집 , istio_dry_run_allow_로 prefix된 메트릭 생성됨
              }
          },
...

# istio proxy log level 변경
docker exec -it myk8s-control-plane istioctl proxy-config log deploy/webapp -n istioinaction --level rbac:debug

# 적용 후 확인
kubectl exec deploy/sleep -- curl -sSL webapp.istioinaction/api/catalog
kubectl exec deploy/sleep -- curl -sSL webapp.istioinaction/hello/world # 403 리턴
RBAC: access denied

# 로그 : 403 리턴 체크!
kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f
[2025-05-10T14:24:03.607Z] &quot;GET /hello/world HTTP/1.1&quot; 403 - rbac_access_denied_matched_policy[none] - &quot;-&quot; 0 19 0 - &quot;-&quot; &quot;curl/8.5.0&quot; &quot;de03bdcc-3ae5-9e74-ad71-cce4ce5dc800&quot; &quot;webapp.istioinaction&quot; &quot;-&quot; inbound|8080|| - 10.10.0.13:8080 10.10.0.14:45240 - -

# 다음 실습을 위해 정책 삭제
kubectl delete -f ch9/allow-catalog-requests-in-web-app.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238023ad71fc6129073d92&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;첫 번째 호출은 경로가 일치하기 때문에 요청을 허용한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23800aab2dd1391f1fa69d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;두 번째 호출은 놀라울 수 있다. 정책이 요청을 허용하거나 거부하지 않았는데 왜 요청이 거부되는가?&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238032a1bfe7e72375c3af&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이것은 바로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ALLOW 정책을 워크로드에 적용했을 때만 적용&lt;/span&gt;되는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본 거부&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;deny-by-default&lt;/span&gt; 동작이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23800db1abc4cb32e7d66b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다시 말해 워크로드에 ALLOW 정책이 있는 경우, 트래픽이 허용되려면 정책 하나는 반드시 부합해야 한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380039b17cecdee613e62&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/e4916a14-f8df-46b5-a08a-09d3baee8f09/CleanShot_2025-05-03_at_19.07.29.png?table=block&amp;amp;id=1efb8b2c-1c23-8003-9b17-cecdee613e62&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=AG6wV0TGpOP8kCKbVsyO5k5d-CTN73nB8ssIue3YQLI&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;151.673735725938&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380be9d44ca02752a7fd9&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/3c34d84d-96d0-41e4-bb1b-7e65defc7b1a/CleanShot_2025-05-03_at_19.25.36.png?table=block&amp;amp;id=1efb8b2c-1c23-80be-9d44-ca02752a7fd9&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=vgyuFRTq7CpO_1CrToRaB0pOrpIIzf7PmVNPL1f5Uio&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;594.2474226804123&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238051b800cb36eef90ca9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-1efb8b2c1c2380a19a27c1b131239f3a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;정책 설정 과정을 단순화해 서비스마다 호출이 허용되는지, ALLOW 정책이 적용되는지를 스스로에게 되묻지 않으려면, 들어오는 트래픽에 다른 정책이 적용되지 않을 때 활성화되는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;전체&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;catch-all&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;거부 정책&lt;/span&gt;을 추가하는 것을 권장한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23804c93a6c09e5a76efc8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그럼 허용허려는 트래픽에 대해서만 생각하고, 그 트래픽용 정책만 만들면 된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380819b8fdf0aa3e03008&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 9.10은 전체 거부 정책이 어떻게 &amp;lsquo;명시적으로 지정되지 않으면 요청을 거부한다&amp;rsquo;로 바꾸는지 보여준다. 그럼 트래픽을 허용하기만 하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23803e8d14fb3f46c1ca32&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/e112173a-50d7-420f-8617-3021d1f30e04/CleanShot_2025-05-03_at_23.37.59.png?table=block&amp;amp;id=1efb8b2c-1c23-803e-8d14-fb3f46c1ca32&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=oHVc0Z7A5NBmK4K3q3w29TyJDXZ3bnvZl3m-wz-0IRA&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;239.11111111111111&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238049b2beffb266738e9b&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.3.4 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;전체 정책으로 기본적으로 모든 요청 거부하기&lt;/u&gt;&lt;/span&gt; Denying all requests by default with a catch-all policy&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23800b88f1d84e84078cc4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;보안성을 증가시키고 과정을 단순화하기 위해, ALLOW 정책을 명시적으로 지정하지 않은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모든 요청을 거부하는 메시 범위 정책&lt;/span&gt;을 정의해보자.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238046a27fff5a18a96247&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본 거부&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;catch-all-deny-all&lt;/span&gt; 정책을 정의한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380648127d5d9c49e589f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# cat ch9/policy-deny-all-mesh.yaml
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: deny-all
  namespace: istio-system # 이스티오를 설치한 네임스페이스의 정책은 메시의 모든 워크로드에 적용된다
spec: {} # spec 이 비어있는 정책은 모든 요청을 거부한다&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380bdb6c3c90c45c69bdd&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23804b9bc3d8ed8ed478b3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;적용 후 요청 테스트&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238016a4e5e805c269119a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 적용 전 확인 
kubectl exec deploy/sleep -- curl -sSL webapp.istioinaction/api/catalog
[{&quot;id&quot;:1,&quot;color&quot;:&quot;amber&quot;,&quot;department&quot;:&quot;Eyewear&quot;,&quot;name&quot;:&quot;Elinor Glasses&quot;,&quot;price&quot;:&quot;282.00&quot;},{&quot;id&quot;:2,&quot;color&quot;:&quot;cyan&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Atlas Shirt&quot;,&quot;price&quot;:&quot;127.00&quot;},{&quot;id&quot;:3,&quot;color&quot;:&quot;teal&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Small Metal Shoes&quot;,&quot;price&quot;:&quot;232.00&quot;},{&quot;id&quot;:4,&quot;color&quot;:&quot;red&quot;,&quot;department&quot;:&quot;Watches&quot;,&quot;name&quot;:&quot;Red Dragon Watch&quot;,&quot;price&quot;:&quot;232.00&quot;}]

curl -s http://webapp.istioinaction.io:30000/api/catalog
[{&quot;id&quot;:1,&quot;color&quot;:&quot;amber&quot;,&quot;department&quot;:&quot;Eyewear&quot;,&quot;name&quot;:&quot;Elinor Glasses&quot;,&quot;price&quot;:&quot;282.00&quot;},{&quot;id&quot;:2,&quot;color&quot;:&quot;cyan&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Atlas Shirt&quot;,&quot;price&quot;:&quot;127.00&quot;},{&quot;id&quot;:3,&quot;color&quot;:&quot;teal&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Small Metal Shoes&quot;,&quot;price&quot;:&quot;232.00&quot;},{&quot;id&quot;:4,&quot;color&quot;:&quot;red&quot;,&quot;department&quot;:&quot;Watches&quot;,&quot;name&quot;:&quot;Red Dragon Watch&quot;,&quot;price&quot;:&quot;232.00&quot;}]


# 정책 적용
kubectl apply -f ch9/policy-deny-all-mesh.yaml

kubectl get authorizationpolicy -A
NAMESPACE      NAME       AGE
istio-system   deny-all   3s

# 적용 후 확인 1
kubectl exec deploy/sleep -- curl -sSL webapp.istioinaction/api/catalog
...
kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f
[2025-05-10T14:35:58.777Z] &quot;GET /api/catalog HTTP/1.1&quot; 403 - rbac_access_denied_matched_policy[none] - &quot;-&quot; 0 19 0 - &quot;-&quot; &quot;curl/8.5.0&quot; &quot;b851c23a-fe75-9d90-bb16-1afdab14a37b&quot; &quot;webapp.istioinaction&quot; &quot;-&quot; inbound|8080|| - 10.10.0.13:8080 10.10.0.14:35850 - -

# 적용 후 확인 2
curl -s http://webapp.istioinaction.io:30000/api/catalog
...
kubectl logs -n istio-system -l app=istio-ingressgateway -f
[2025-05-10T14:36:19.367Z] &quot;GET /api/catalog HTTP/1.1&quot; 403 - rbac_access_denied_matched_policy[none] - &quot;-&quot; 0 19 0 - &quot;-&quot; &quot;curl/8.5.0&quot; &quot;502c9e49-4f0d-9644-a3bc-7e85ef18bdd0&quot; &quot;webapp.istioinaction&quot; &quot;-&quot; inbound|8080|| - 10.10.0.13:8080 10.10.0.14:49788 - -&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238018ac27c3154744768e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238043b8a8c16a0644ab16&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(참고) &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Catch-all authorization policies&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;빈 규칙&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;rules&lt;/span&gt; 은&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 모든 요청을 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;허용&lt;/span&gt;&lt;/span&gt; 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23800b91c6ebe8163340e8&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# cat ch9/policy-allow-all-mesh.yaml                         
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-all
  namespace: istio-system
spec: 
  rules: 
  - {}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238022adc4d8ee00c06bbf&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.3.5 특정 네임스페이스에서 온 요청 허용하기&lt;/span&gt; Allowing requests originating from a single namespace&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23806d9389d891f9498ef8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;종종 특정 네임스페이스에서 시작한, 모든 서비스에 대한 트래픽을 허용하고 싶을 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380979628c131a76c1324&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;source.namespace&lt;/code&gt; 속성으로 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380cca011f8668e87c339&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 예제는 한 네임스페이스에서 온 HTTP GET 트래픽을 허용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380bd95cbe12d250a3c34&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 
cat &amp;lt;&amp;lt; EOF | kubectl apply -f -
apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;AuthorizationPolicy&quot;
metadata:
  name: &quot;webapp-allow-view-default-ns&quot;
  namespace: istioinaction # istioinaction의 워크로드
spec:
  rules:
  - from: # default 네임스페이스에서 시작한
    - source:
        namespaces: [&quot;default&quot;]
    to:   # HTTP GET 요청에만 적용 
    - operation:
        methods: [&quot;GET&quot;]
EOF

#
kubectl get AuthorizationPolicy -A

NAMESPACE       NAME                           AGE
istio-system    deny-all                       118s
istioinaction   webapp-allow-view-default-ns   3s

docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/webapp.istioinaction --port 15006 -o json
...
                {
                    &quot;name&quot;: &quot;envoy.filters.http.rbac&quot;,
                    &quot;typedConfig&quot;: {
                        &quot;@type&quot;: &quot;type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC&quot;,
                        &quot;rules&quot;: {
                            &quot;policies&quot;: {
                                &quot;ns[istio-system]-policy[deny-all]-rule[0]&quot;: {
                                    &quot;permissions&quot;: [
                                        {
                                            &quot;notRule&quot;: {
                                                &quot;any&quot;: true
                                            }
                                        }
                                    ],
                                    &quot;principals&quot;: [
                                        {
                                            &quot;notId&quot;: {
                                                &quot;any&quot;: true
                                            }
                                        }
                                    ]
                                },
                                &quot;ns[istioinaction]-policy[webapp-allow-view-default-ns]-rule[0]&quot;: {
                                    &quot;permissions&quot;: [
                                        {
                                            &quot;andRules&quot;: {
                                                &quot;rules&quot;: [
                                                    {
                                                        &quot;orRules&quot;: {
                                                            &quot;rules&quot;: [
                                                                {
                                                                    &quot;header&quot;: {
                                                                        &quot;name&quot;: &quot;:method&quot;,
                                                                        &quot;exactMatch&quot;: &quot;GET&quot;
                                                                    }
                                                                }
                                                            ]
                                                        }
                                                    }
                                                ]
                                            }
                                        }
                                    ],
                                    &quot;principals&quot;: [
                                        {
                                            &quot;andIds&quot;: {
                                                &quot;ids&quot;: [
                                                    {
                                                        &quot;orIds&quot;: {
                                                            &quot;ids&quot;: [
                                                                {
                                                                    &quot;filterState&quot;: {
                                                                        &quot;key&quot;: &quot;io.istio.peer_principal&quot;,
                                                                        &quot;stringMatch&quot;: {
                                                                            &quot;safeRegex&quot;: {
                                                                                &quot;regex&quot;: &quot;.*/ns/default/.*&quot;
...

# 호출 테스트
kubectl exec deploy/sleep -- curl -sSL webapp.istioinaction/api/catalog
...

#
kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f
[2025-05-10T14:43:41.147Z] &quot;GET /api/catalog HTTP/1.1&quot; 403 - rbac_access_denied_matched_policy[none] - &quot;-&quot; 0 19 0 - &quot;-&quot; &quot;curl/8.5.0&quot; &quot;8396092f-7f32-9b3d-9263-12d59362c917&quot; &quot;webapp.istioinaction&quot; &quot;-&quot; inbound|8080|| - 10.10.0.13:8080 10.10.0.14:55752 - -&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380418810f055adc01763&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b8b6d8eca120fbf993&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;sleep&lt;/span&gt; 서비스는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;레거시 워크로드&lt;/span&gt;다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The sleep service is a legacy workload.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238052a60cdfe14536c1c5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;사이트카가 없으므로, ID도 없다&lt;/span&gt;. 그러므로 webapp 프록시는 요청이 default 네임이스페이스의 워크로드에서 온 것인지 확인할 수 없다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23805dafe7c4917341c67a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 해결하려면 다음 중 하나를 할 수 있다.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23802f9112df57cebea140&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;sleep 서비스에 서비스 프록시 주입하기&lt;/span&gt;&lt;i&gt; &amp;rarr; 실습 진행&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380acb258fd22c392cd64&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;webapp에서 미인증 요청 허용하기&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23805e9d80c475c6529c03&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-1efb8b2c1c23806691d1ddba433e1a37&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;권장하는 방식은 sleep 서비스에 서비스 프록시를 주입하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238093bf52c5fb3aef27d5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇게 하면 ID를 부트스트랩하고 다른 워크로드와의 상호 인증을 수행해서 다른 워크로드가 요청의 출처와 네임스페이스를 확인 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23809c9bc7c0e97cda08c1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 시연을 위해, 첫 번째 접근법이 불가능해(예를 들면, 팀 전체가 휴가 중이라서) 어쩔 수 없이 두 번째 접근법(덜 안전한)을 취해야 한다고 해보자.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c89123e6ceb6de2133&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;미인증 요청을 허용하는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23804ba4bac194e72f2701&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ecb0f7c60b318c0c9d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23803ab5a6c5247e41a6fd&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
kubectl label ns default istio-injection=enabled
kubectl delete pod -l app=sleep

#
docker exec -it myk8s-control-plane istioctl proxy-status
NAME                                                   CLUSTER        CDS        LDS        EDS        RDS          ECDS         ISTIOD                    VERSION
sleep-6f8cfb8c8f-cnlqq.default                         Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-8d74787f-bkwnr     1.17.8
...

# 호출 테스트 : webapp
kubectl exec deploy/sleep -- curl -sSL webapp.istioinaction # default -&amp;gt; webapp 은 성공
...

# webapp istio proxy log level 변경
docker exec -it myk8s-control-plane istioctl proxy-config log deploy/webapp -n istioinaction --level rbac:debug

# 호출 테스트: catalog
kubectl exec deploy/sleep -- curl -sSL webapp.istioinaction/api/catalog 
error calling Catalog service

kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f # webapp -&amp;gt; catalog 는 deny-all 로 거부됨
[2025-05-10T15:03:50.669Z] &quot;GET /items HTTP/1.1&quot; 403 - via_upstream - &quot;-&quot; 0 19 0 0 &quot;-&quot; &quot;beegoServer&quot; &quot;2f0bec28-59bd-9379-832c-c3858274d9de&quot; &quot;catalog.istioinaction:80&quot; &quot;10.10.0.12:3000&quot; outbound|80||catalog.istioinaction.svc.cluster.local 10.10.0.13:50766 10.200.1.181:80 10.10.0.13:39724 - default
[2025-05-10T15:03:50.667Z] &quot;GET /api/catalog HTTP/1.1&quot; 500 - via_upstream - &quot;-&quot; 0 29 3 2 &quot;-&quot; &quot;curl/8.5.0&quot; &quot;2f0bec28-59bd-9379-832c-c3858274d9de&quot; &quot;webapp.istioinaction&quot; &quot;10.10.0.13:8080&quot; inbound|8080|| 127.0.0.6:54073 10.10.0.13:8080 10.10.0.15:43204 outbound_.80_._.webapp.istioinaction.svc.cluster.local default

# 호출 테스트 : catalog
# istioinaction ns에는 default workload에서 오는 모든 요청은 허용하는 authorizationPolicy가 적용되어있음
kubectl logs -n istioinaction -l app=catalog -c istio-proxy -f
kubectl exec deploy/sleep -- curl -sSL catalog.istioinaction/items # default -&amp;gt; catalog 은 성공
[
  {
    &quot;id&quot;: 1,
    &quot;color&quot;: &quot;amber&quot;,
    &quot;department&quot;: &quot;Eyewear&quot;,
    &quot;name&quot;: &quot;Elinor Glasses&quot;,
    &quot;price&quot;: &quot;282.00&quot;
  },
...

# 호출 테스트: local -&amp;gt; catalog
# 실패!! =&amp;gt; 이유는 catch-all-deny authorizationPolicy가 있기 때문에!
curl -s http://catalog.istioinaction.io:30000/api/catalog        
RBAC: access denied

# 다음 실습을 위해 default 네임스페이스 원복
kubectl label ns default istio-injection-
kubectl rollout restart deploy/sleep

docker exec -it myk8s-control-plane istioctl proxy-status

kubectl exec deploy/sleep -- curl -sSL webapp.istioinaction # 거부 확인
RBAC: access denied&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380bab6e9d177d1fe9141&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.3.6 미인증 레거시 워크로드에서 온 요청 허용하기&lt;/span&gt; Allowing requests from non-authenticated legacy workloads&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238092ba4ffb3ecf75ad97&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;미인증 워크로드에서 온 요청을 허용&lt;/span&gt;&lt;/span&gt;하려면&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; from 필드를 삭제&lt;/span&gt;&lt;/span&gt;해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238060b2aec70390930268&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 정책을 webapp에만 적용하기 위해&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; app:webapp 셀렉터를 추가&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e48c65e95bb198ad10&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이렇게 하면 catalog 서비스에는 여전히 상호 인증이 필요하다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This way, the catalog service still requires mutual authentication.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23802a9760ece9595198cf&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# cat ch9/allow-unauthenticated-view-default-ns.yaml
apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;AuthorizationPolicy&quot;
metadata:
  name: &quot;webapp-allow-unauthenticated-view-default-ns&quot;
  namespace: istioinaction
spec:
  selector:
    matchLabels:
      app: webapp
  rules:
    - to:
      - operation:
          methods: [&quot;GET&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d4bc06e08effca8e22&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b5ba77d73848f9cbd2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380ae9b0aef39b983cbef&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
kubectl apply -f ch9/allow-unauthenticated-view-default-ns.yaml
kubectl get AuthorizationPolicy -A
NAMESPACE       NAME                                           AGE
istio-system    deny-all                                       12h
istioinaction   webapp-allow-unauthenticated-view-default-ns   14s
istioinaction   webapp-allow-view-default-ns                   11h

# 여러개의 정책이 적용 시에 우선순위는?
# ns내에서 CUSTOM -&amp;gt; DENY -&amp;gt; ALLOW -&amp;gt; CATCH-ALL 순서로 동작
# selector가 추가되어서 ns내에서 특정 workload에 대한 ALLOW authorizationPolicy가 있더라도, ns에 selector가 없는 전체에 대한 DENY가 있으면 DENY가 우선!!
# 단, CATCH-ALL-DENY-ALL(위에서 생성한 istio-system ns의 deny-all authorizationPolicy) 처럼 istiod가 설치된 ns에 적용된 deny action은 모든 ns에 걸쳐 적용된다.
# 하지만 CATCH-ALL은 우선순위가 가장 낮음
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/webapp.istioinaction --port 15006 -o json | jq
...
         &quot;name&quot;: &quot;envoy.filters.http.rbac&quot;,
                        &quot;typedConfig&quot;: {
                            &quot;@type&quot;: &quot;type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC&quot;,
                            &quot;rules&quot;: {
                                &quot;policies&quot;: {
                                    &quot;ns[istio-system]-policy[deny-all]-rule[0]&quot;: {
                                        &quot;permissions&quot;: [
                                            {
                                                &quot;notRule&quot;: {
                                                    &quot;any&quot;: true
                                                }
                                            }
                                        ],
                                        &quot;principals&quot;: [
                                            {
                                                &quot;notId&quot;: {
                                                    &quot;any&quot;: true
                                                }
                                            }
                                        ]
                                    },
                                    &quot;ns[istioinaction]-policy[webapp-allow-unauthenticated-view-default-ns]-rule[0]&quot;: {
                                        &quot;permissions&quot;: [
                                            {
                                                &quot;andRules&quot;: {
                                                    &quot;rules&quot;: [
                                                        {
                                                            &quot;orRules&quot;: {
                                                                &quot;rules&quot;: [
                                                                    {
                                                                        &quot;header&quot;: {
                                                                            &quot;name&quot;: &quot;:method&quot;,
                                                                            &quot;exactMatch&quot;: &quot;GET&quot;
                                                                        }
                                                                    }
                                                                ]
                                                            }
                                                        }
                                                    ]
                                                }
                                            }
                                        ],
                                        &quot;principals&quot;: [
                                            {
                                                &quot;andIds&quot;: {
                                                    &quot;ids&quot;: [
                                                        {
                                                            &quot;any&quot;: true
                                                        }
                                                    ]
                                                }
                                            }
                                        ]
                                    },
                                    &quot;ns[istioinaction]-policy[webapp-allow-view-default-ns]-rule[0]&quot;: {
                                        &quot;permissions&quot;: [
                                            {
                                                &quot;andRules&quot;: {
                                                    &quot;rules&quot;: [
                                                        {
                                                            &quot;orRules&quot;: {
                                                                &quot;rules&quot;: [
                                                                    {
                                                                        &quot;header&quot;: {
                                                                            &quot;name&quot;: &quot;:method&quot;,
                                                                            &quot;exactMatch&quot;: &quot;GET&quot;
                                                                        }
                                                                    }
                                                                ]
                                                            }
                                                        }
                                                    ]
                                                }
                                            }
                                        ],
                                        &quot;principals&quot;: [
                                            {
                                                &quot;andIds&quot;: {
                                                    &quot;ids&quot;: [
                                                        {
                                                            &quot;orIds&quot;: {
                                                                &quot;ids&quot;: [
                                                                    {
                                                                        &quot;filterState&quot;: {
                                                                            &quot;key&quot;: &quot;io.istio.peer_principal&quot;,
                                                                            &quot;stringMatch&quot;: {
                                                                                &quot;safeRegex&quot;: {
                                                                                    &quot;regex&quot;: &quot;.*/ns/default/.*&quot;
                                                                                }
...

# 호출 테스트 : webapp
kubectl exec deploy/sleep -- curl -sSL webapp.istioinaction # default -&amp;gt; webapp 은 성공
...

# webapp -&amp;gt; catalog 는 deny-all 로 거부됨
# deny-all은 istio-system ns에 생성된 CATCH-ALL action임
kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f 
kubectl exec deploy/sleep -- curl -sSL webapp.istioinaction/api/catalog 
error calling Catalog service

# (옵션) 호출 테스트 : catalog
kubectl logs -n istioinaction -l app=catalog -c istio-proxy -f
kubectl exec deploy/sleep -- curl -sSL catalog.istioinaction/items
curl: (56) Recv failure: Connection reset by peer
command terminated with exit code 56

# 위에서 설정한 istio-system ns의 mtls STRICT Mode의 PeerAuthentication에 의해서 거부됨
kubectl get pa -A
NAMESPACE       NAME      MODE         AGE
istio-system    default   STRICT       6h54m
istioinaction   webapp    PERMISSIVE   6h43m&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23808c8ea0e0f8355a41b8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380828d67cccc2a7ffce0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;webapp 은 sleep 서비스에서 요청을 허용했지만, 메시 범위 전체 거부 정책이 catalog 서비스로의 후속 요청을 거부헀다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e2908dd7e58bd294ae&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음절에서 해결해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23802a8f17d20ce4434d44&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.3.7 특정 서비스 어카운트에서 온 요청 허용하기&lt;/span&gt; Allowing requests from a single service account&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23808a872fdf4450601fee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽이 webapp 서비스에서 왔는지 인증할 수 있는 간단한 방법은 트래픽에 주입된 서비스 어카운트를 사용하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d78007da594e4daa24&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 어카운트 정보는 SVID에 인코딩돼 있으며, 상호 인증 중에 그 정보를 검증하고 필터 메타데이터에 저장한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f4a790c962eaf997de&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 정책은 catalog 서비스가 필터 메타데이터를 사용해 서비스 어카운트가 webapp인 워크로드에서 온 트래픽만 허용하도록 설정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23809babc9f8ebd7c04998&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# cat ch9/catalog-viewer-policy.yaml
apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;AuthorizationPolicy&quot;
metadata:
  name: &quot;catalog-viewer&quot;
  namespace: istioinaction
spec:
  selector:
    matchLabels:
      app: catalog
  rules:
  - from:
    - source: 
        principals: [&quot;cluster.local/ns/istioinaction/sa/webapp&quot;] # Allows requests with the identity of webapp
    to:
    - operation:
        methods: [&quot;GET&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d7abaef320cf655d5a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380129759d97787bbc2ad&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23807dbe32e62d96ce5993&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
kubectl apply -f ch9/catalog-viewer-policy.yaml
kubectl get AuthorizationPolicy -A
NAMESPACE       NAME                                           AGE
istio-system    deny-all                                       6m24s
istioinaction   catalog-viewer                                 4s
istioinaction   webapp-allow-unauthenticated-view-default-ns   35m
istioinaction   webapp-allow-view-default-ns                   6m29s

#
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/catalog.istioinaction --port 15006 -o json
...
            &quot;principals&quot;: [
                {
                    &quot;andIds&quot;: {
                        &quot;ids&quot;: [
                            {
                                &quot;orIds&quot;: {
                                    &quot;ids&quot;: [
                                        {
                                            &quot;filterState&quot;: {
                                                &quot;key&quot;: &quot;io.istio.peer_principal&quot;,
                                                &quot;stringMatch&quot;: {
                                                    &quot;exact&quot;: &quot;spiffe://cluster.local/ns/istioinaction/sa/webapp&quot;
                                                }
...

# 호출 테스트 : sleep --(미인증 레거시 허용)--&amp;gt; webapp --(principals webapp 허용)--&amp;gt; catalog
kubectl exec deploy/sleep -- curl -sSL webapp.istioinaction
kubectl exec deploy/sleep -- curl -sSL webapp.istioinaction/api/catalog 

# 호출 성공
kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f
[2025-05-10T15:47:53.477Z] &quot;GET /items HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 502 12 11 &quot;-&quot; &quot;beegoServer&quot; &quot;54b880b5-cbb8-9ec9-bea9-c8e63e7da79b&quot; &quot;catalog.istioinaction:80&quot; &quot;10.10.0.12:3000&quot; outbound|80||catalog.istioinaction.svc.cluster.local 10.10.0.13:55852 10.200.1.181:80 10.10.0.13:57040 - default
[2025-05-10T15:47:53.475Z] &quot;GET /api/catalog HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 357 14 13 &quot;-&quot; &quot;curl/8.5.0&quot; &quot;54b880b5-cbb8-9ec9-bea9-c8e63e7da79b&quot; &quot;webapp.istioinaction&quot; &quot;10.10.0.13:8080&quot; inbound|8080|| 127.0.0.6:54073 10.10.0.13:8080 10.10.0.16:51212 - default

# webapp --(principals webapp 허용)--&amp;gt; catalog: 호출 성공
kubectl logs -n istioinaction -l app=catalog -c istio-proxy -f
[2025-05-10T15:47:53.480Z] &quot;GET /items HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 502 5 5 &quot;-&quot; &quot;beegoServer&quot; &quot;54b880b5-cbb8-9ec9-bea9-c8e63e7da79b&quot; &quot;catalog.istioinaction:80&quot; &quot;10.10.0.12:3000&quot; inbound|3000|| 127.0.0.6:40577 10.10.0.12:3000 10.10.0.13:55852 outbound_.80_._.catalog.istioinaction.svc.cluster.local default

# (옵션) 호출 테스트 : catalog
kubectl exec deploy/sleep -- curl -sSL catalog.istioinaction/items
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23808fbc3bc220527ae2c0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380afa658d9ce11f8d4c0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 워크로드 ID가 도난당한 경우 피해를 가능한 한 최소한의 범위로 제한하도록 어멱한 인가 정책을 갖고 있다는 점이 더 중요하다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23804b92e1f8ff3c584562&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;But more importantly, we have strict authorization policies in place so that if the identity of a workload is stolen, the damage will be limited to the smallest scope possible.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23806b9194c9ba35ff11c4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.3.8 정책의 조건부 적용&lt;/span&gt; Conditional matching of policies&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380be9074ede7f2022fea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;가끔 어떤 정책은 특정 조건이 충족되는 경우에만 적용되기도 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d3b0eac03ee90f6f15&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사용자가 관리자일 때는 모든 작업을 허용하는 식이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c2bf35e5a02d32c114&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 다음 예제처럼 인가 정책의 when 속성을 사용해 구현할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238079b127eb566843d1ee&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;AuthorizationPolicy&quot;
metadata:
  name: &quot;allow-mesh-all-ops-admin&quot;
  namespace: istio-system
spec:
  rules:
  - from:
    - source:
        requestPrincipals: [&quot;auth@istioinaction.io/*&quot;]
    when:
    - key: request.auth.claims[groups] # 이스티오 속성을 지정한다
      values: [&quot;admin&quot;] # 반드시 일치해야 하는 값의 목록을 지정한다&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238086ba18c82dd433f309&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23802796ede2afe9b1d09f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 정책은 다음 두 조건이 모두 충족될 때만 요청을 허용한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c29971c95c3dd72034&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;첫째, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;토큰&lt;/span&gt;은 요청 주체 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;auth@istioinaction.io/*&lt;/code&gt; 가 발급한 것이어야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23800b956cfcea03c730d1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;둘째, JWT에 값이 &amp;lsquo;admin&amp;rsquo;인 group &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클레임&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;claim&lt;/span&gt;이 포함돼 있어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380a78751e5e7793fb9ba&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1efb8b2c1c2380f2b21ef2d893050715&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;ADMIN_TOKEN=$(&amp;lt; ch9/enduser/admin.jwt)
jwt decode $ADMIN_TOKEN

Token header
------------
{
  &quot;typ&quot;: &quot;JWT&quot;,
  &quot;alg&quot;: &quot;RS256&quot;,
  &quot;kid&quot;: &quot;CU-ADJJEbH9bXl0tpsQWYuo4EwlkxFUHbeJ4ckkakCM&quot;
}

Token claims
------------
{
  &quot;exp&quot;: 4745145071,
  &quot;group&quot;: &quot;admin&quot;,
  &quot;iat&quot;: 1591545071,
  &quot;iss&quot;: &quot;auth@istioinaction.io&quot;,
  &quot;sub&quot;: &quot;218d3fb9-4628-4d20-943c-124281c80e7b&quot;
}

kubectl apply -f ch9/enduser/jwt-token-request-authn.yaml
kubectl apply -f ch9/enduser/allow-mesh-all-ops-admin.yaml

curl -H &quot;Authorization: Bearer $ADMIN_TOKEN&quot; \
     -sSl -o /dev/null -w &quot;%{http_code}\n&quot; webapp.istioinaction.io:30000/api/catalog
200&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d69674deb525a100f3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23806bb8d6c77f3a128e2e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23808a8492e9d4f02868fd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또는 notValues 속성을 사용해 이 정책을 적용하지 않아야 하는 값들을 정의할 수도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23803b8c6edd9fc3a6fd00&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;조건에서 사용할 수 있는 이스티오 속성 전체 목록은 이스티오 문서에서 찾을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1efb8b2c1c238011a4fafc4682e65314&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/reference/config/security/conditions/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://istio.io/latest/docs/reference/config/security/conditions/&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1efb8b2c1c23807d86f2d47dd0263a21&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23800b941ae163ec4a6a56&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1602.66px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1efb8b2c1c2380e6b95ddcbf81e3d10b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Principals&lt;/span&gt; vs. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;request principals&lt;/span&gt; 차이점 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;source&lt;/span&gt; 를 정의하는 문서를 보면 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/reference/config/security/authorization-policy/#Source&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://istio.io/latest/docs/reference/config/security/authorization-policy/#Source&lt;/a&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;from&lt;/span&gt; 절에서 요청의 주체를 인식하는 방법에는 Principals , request principals&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &lt;/span&gt;가 있다는 것을 알 수 있다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Principals&lt;/span&gt; 은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PeerAuthentication&lt;/span&gt; 으로 설정한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;상호 TLS 커넥션&lt;/span&gt;의 참가자인 것과 달리, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;request&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;principals&lt;/span&gt; 는 최종 사용자 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Request Authentication&lt;/span&gt; 용이며 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;JWT&lt;/span&gt;에서 온다는 점에서 차이가 있다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238076abebcdf4daf337f1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380ad9049d57056bb7292&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.3.9 값 비교 표현식 이해하기&lt;/span&gt; Understanding value-match expressions&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238007909cd761522ddeef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞 선 예제에서 값이 항상 정확히 일치할 필요는 없다는 것을 확인했다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380a5af50ec72f941db2d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 규칙을 더 다양하게 만들 수 있도록 간단한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;비교 표현식&lt;/span&gt;을 지원한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e58892e2e4f24d8e2b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Exact&lt;/span&gt; matching of values &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;일치&lt;/span&gt;. 예를 들어 GET은 값이 정확히 일치해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23809fbf84ed9dccd4a084&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Prefix&lt;/span&gt; matching of values &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;접두사 (매칭)비교&lt;/span&gt;. 예를 들어 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/api/catlog*&lt;/code&gt; 는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/api/catalog/1&lt;/code&gt; 과 같이 접두사로 시작하는 모든 값에 부합한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23807bbb12c1ec7c398467&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Suffix&lt;/span&gt; matching of values &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;접미사 (매칭)비교&lt;/span&gt;. 예를 들어 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;*.istioinaction.io&lt;/code&gt; 는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;login.istioinaction.io&lt;/code&gt; 와 같이 모든 서브도메인에 부합한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23805bba38c61d8b11204b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Presence&lt;/span&gt; matching &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;존재성 (매칭)비교&lt;/span&gt;. 모든 값에 부합하며 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;*&lt;/code&gt;로 표기한다. 이는 필드가 존재해야 하지만, 값은 중요하지 않아 어떤 값이든 괜찮음을 의미한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380dd81d1e730c0aa5edf&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23801093b7d08607c93ac4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;정책 규칙이 어떻게 평가되는지 이해하기&lt;/u&gt;&lt;/span&gt; UNDERSTANDING HOW POLICY RULES ARE EVALUATED&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238089b140ed7eb692e42b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;정책 규칙을 이해하기 위해 좀 더 복잡한 규칙이 어떤 요청에 적용되는지 구체적으로 분석해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380f3bb00f05a4ba943b1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;AuthorizationPolicy&quot;
metadata:
  name: &quot;allow-mesh-all-ops-admin&quot;
  namespace: istio-system
spec:
  rules: 
  - from: # 첫 번째 규칙
    - source:
        principals: [&quot;cluster.local/ns/istioinaction/sa/webapp&quot;]
    - source:
        namespace: [&quot;default&quot;]
    to:
    - operation:
        methods: [&quot;GET&quot;]
        paths: [&quot;/users*&quot;]
    - operation:
        methods: [&quot;POST&quot;]
        paths: [&quot;/data&quot;]
    when:
    - key: request.auth.claims[group]
      values: [&quot;beta-tester&quot;, &quot;admin&quot;, &quot;developer&quot;]
  - to: # 두 번째 규치
    - operation:
        paths: [&quot;*.html&quot;, &quot;*.js&quot;, &quot;*.png&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380c3a58acab095dafc1e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23800994efdf6aafda2632&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;위 인가 정책이 요청에 적용되려면, 첫 번째 규칙이나 두 번째 규칙에 해당해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238088b6dbee00553afbe8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;첫 번째 규칙에 해당하는 경우를 좀 더 자세히 살펴보자.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23808a8a6bc2088eccb570&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;  - from: # 소스들 Sources
    - source:
        principals: [&quot;cluster.local/ns/istioinaction/sa/webapp&quot;]
    - source:
        namespace: [&quot;default&quot;]
    to: # operations 들
    - operation:
        methods: [&quot;GET&quot;]
        paths: [&quot;/users*&quot;]
    - operation:
        methods: [&quot;POST&quot;]
        paths: [&quot;/data&quot;]
    when: # 조건들 Conditions
    - key: request.auth.claims[group]
      values: [&quot;beta-tester&quot;, &quot;admin&quot;, &quot;developer&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238030a7cffad8dc90e4cc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청이 이 규칙에 해당하려면, 세 가지 속성에서 모두 부합해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d5aa5ff8ad0b737bb0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;source 목록에서 정의한 source 중 하나가 operation 목록에서 정의한 operation 과 맞아야 하고, 모든 조건이 부합해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23809faa91fe74b94997bf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다시 말해 from 에서 정의한 source 가 to 에 정의한 operation 중 하나와 AND 연산되고, 둘 다 when 에서 지정한 조건들 모두와 AND 연산된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23804b82ffed0fb5d60ff9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-1efb8b2c1c2380969974fe5f88fa3e85&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;operation 에 어떻게 해당하는지 이해하기 위해 operation을 좀 더 자세히 살펴보자.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23806ca290c4371eafd812&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;    to: # operations 들
    - operation: # 첫 번째 operation
        methods: [&quot;GET&quot;]   # 첫 번째 operation에 해당하려면 일치해야 하는 두 속성
        paths: [&quot;/users*&quot;] # 첫 번째 operation에 해당하려면 일치해야 하는 두 속성
    - operation: # 첫 번째 operation
        methods: [&quot;POST&quot;]  # 두 번째 operation에 해당하려면 일치해야 하는 두 속성
        paths: [&quot;/data&quot;]   # 두 번째 operation에 해당하려면 일치해야 하는 두 속성&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380bbb6aef859fbc5dcc2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 규칙에서 operation 이 부합하려면, 첫 번째나 두 번째 operation이 부합해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238087a105ea37757089f2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;operation 이 부합하려면 모든 속성이 부합해야 한다. 즉, 모든 속성이 AND로 연결된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380399732c2a9025172f1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ea9bedc1aef0bdb05c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;한편 when 속성의 경우도 AND로 연결되기 때문에 모든 조건이 부합해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380ba976cf0fcfed2eeaa&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.3.10 인가 정책이 평가되는 순서 이해하기&lt;/span&gt; Understanding the order in which authorization policies are evaluated&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1efb8b2c1c238012bb6dc1bb68dbb4da&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://istio.io/v1.17/docs/concepts/security/#implicit-enablement&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/082bd2aa-90e8-4bc2-b2a7-8035dde6b93d/image.png?table=block&amp;amp;id=1efb8b2c-1c23-8012-bb6d-c1bb68dbb4da&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=41C8-eH0l95izC3q_7fswvjQwVVXoPCQCnpea-57q1U&quot; alt=&quot;https://istio.io/v1.17/docs/concepts/security/#implicit-enablement&quot; width=&quot;768&quot; height=&quot;854.7796610169491&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238048b8f0c016fafc38dd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;한 워크로드에 많은 정책이 적용되고 순서를 이해하기 어려울 때 정책의 복잡성이 대두된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380898aa2e3a5a709e84c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;많은 솔루션이 priority 필드를 사용해 순서를 정의한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238044a9fbf3673ea691d4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 정책 평가에 다른 접근법을 사용한다.
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380468f9cc071c75b72f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;추후 외부 인가 서버와 통합할 때 CUSTOM 정책의 사례를 보여줄 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23803080fcfe38f59058c1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음으로 DENY 정책이 평가된다. 일치하는 DENY 정책이 없으면&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c588a6e2ef48a7da9e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ALLOW 정책이 평가된다. 일치하는 것이 있으면 허용된다. 그렇지 않으면&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238044b417c8b1d56a3d84&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;When a catch-all policy is presen&lt;/span&gt;t, it determines whether the request is approved. 일반 정책이 존재하면, 일반 정책이 요청 승인 여부를 결정한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380859b4cecac079271ac&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;When a catch-all policy is absent&lt;/span&gt;, the request is: 일반 정책이 없으면, 요청은 다음과 같다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238058b7c8f712c621dd14&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Allowed&lt;/span&gt; if there are&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; no ALLOW policie&lt;/span&gt;s, or it&amp;rsquo;s &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ALLOW&lt;/span&gt; 정책이 없으면 허용된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23809ea9f1dfc2e857600b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Rejected&lt;/span&gt; when there are &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ALLOW policies &lt;/span&gt;but none matches. ALLOW 정책이 있지만 아무것도 해당되지 않으면 거부된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23806a8e47ce57b6b15cd9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CUSTOM policies are evaluated first. &lt;/span&gt;CUSTOM 정책이 가장 먼저 평가된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238024a864c325f17cc3f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DENY policies are evaluated next. &lt;/span&gt;If no DENY policy is matched . . .&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238016a3e5c272a9f50fdb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ALLOW policies are evaluated.&lt;/span&gt; If one matches, the request is allowed. Otherwise. . .&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23804ab6cdf31e508c29a9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;According to the &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;presence or absence of a catch-all policy&lt;/span&gt;, we have &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;two outcomes&lt;/span&gt;: 일반 정책의 존재 유무에 따라 두 가지 결과가 나타난다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380448fc6eeb38060774d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e2a1fbeaf361089eea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;조건에 따라 동작이 바뀌므로, &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;그림 9.11 같은 흐름도를 사용하면 더 이해하기 쉬울 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380eb87ebc8927c9082c7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;흐름이 조금 복잡하지만, 일반 DENY 정책을 정의하면 휠씬 간단해진다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380899ef7c5b979e41d88&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청을 거부하는 CUSTOM과 DENY 정책이 없으면&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;허용할 ALLOW 정책이&lt;/span&gt; 있는지만 확인하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23808a99a7c4d5c5992366&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/ec1d4e47-f741-4987-b27c-1ca96a6c918a/CleanShot_2025-05-04_at_13.56.07.png?table=block&amp;amp;id=1efb8b2c-1c23-808a-99a7-c4d5c5992366&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=jzkm2JJz4j6ME1uISSh6iqfGNFa3k_52V6SpaCZ625k&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;856.3151207115628&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238091bae1cd32e429ae65&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c893a7f356358695f9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지금까지 워크로드 사이의 요청에 대한 인증 및 인가를 다뤘다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f591f2feb81d5f7f1f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 절에서는 최종 사용자 인증 및 인가 기능을 살펴본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238096a48bc52a25f401f5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1efb8b2c1c2380b29f29d0226734b812&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.4. 최종 사용자 인증 및 인가&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1efb8b2c1c23801f8d91cd56ba68727b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://netpple.github.io/docs/istio-in-action/Istio-ch9-securing-4-end-user-auth&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://netpple.github.io/docs/istio-in-action/Istio-ch9-securing-4-end-user-auth&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d0bfd5f6155df7af52&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;사전 지식&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;S&lt;/span&gt;ervice &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;A&lt;/span&gt;ccount Token &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Volume Projection&lt;/span&gt;, Admission Control,&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; JWT&lt;/span&gt;(JSON Web Token), &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;OIDC&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1efb8b2c1c23801380cbc9bc7c6065ea&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Service Account Token Volume Projection&lt;/code&gt; : '&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 계정 토큰&lt;/span&gt;'의 시크릿 기반 볼륨 대신 '&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;projected volume&lt;/span&gt;' 사용&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b99610d2710f74bb57&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Service Account Token (SAT) Volume Projection&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#serviceaccount-token-volume-projection&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크&lt;/a&gt;&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380598302fc7d9d5060d2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/44bf0bf3-c1c0-423d-9347-49e986da73d5/CleanShot_2025-03-07_at_14.04.09.png?table=block&amp;amp;id=1efb8b2c-1c23-8059-8302-fc7d9d5060d2&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=pz6XL_eEqYV74C382-fArt1f_hZFu2ir7aqaMUnm7LI&quot; alt=&quot;image&quot; width=&quot;816&quot; height=&quot;358.13929040735877&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238096a8a6c506aac5bf76&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 계정 토큰을 이용해서 서비스와 서비스, 즉 파드(pod)와 파드(pod)의 호출에서 자격 증명으로 사용할 수 있을까요?&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23805eaf33d83f416d9ab3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;불행히도 기본 서비스 계정 토큰으로는 사용하기에 부족함이 있습니다. 토큰을 사용하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;대상&lt;/span&gt;(audience), &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;유효 기간&lt;/span&gt;(expiration) 등 토큰의 속성을 지정할 필요가 있기 때문입니다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238076a934cea9d37c1db3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Service Account Token Volume Projection&lt;/code&gt;&amp;nbsp;기능을 사용하면 이러한 부족한 점들을 해결할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380ae9045ebd63730ee33&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx
    volumeMounts:
    - mountPath: /var/run/secrets/tokens
      name: vault-token
  serviceAccountName: build-robot
  volumes:
  - name: vault-token
    projected:
      sources:
      - serviceAccountToken:
          path: vault-token
          expirationSeconds: 7200
          audience: vault&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380839d56e11945d7a22e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238027b218f225018caef4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; Bound Service Account Token Volume 바인딩된 서비스 어카운트 토큰 볼륨&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/ko/docs/reference/access-authn-authz/service-accounts-admin/#%EB%B0%94%EC%9D%B8%EB%94%A9%EB%90%9C-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%96%B4%EC%B9%B4%EC%9A%B4%ED%8A%B8-%ED%86%A0%ED%81%B0-%EB%B3%BC%EB%A5%A8&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크&lt;/a&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/docs/reference/access-authn-authz/service-accounts-admin/#bound-service-account-token-volume&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;영어&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23800aa6c5d32034ba3f3b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FEATURE STATE:&lt;/span&gt;&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Kubernetes v1.22 [stable]&lt;/code&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380a8b337c0dffd64bc28&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/ko/docs/reference/access-authn-authz/service-accounts-admin/#%EC%84%9C%EB%B9%84%EC%8A%A4%EC%96%B4%EC%B9%B4%EC%9A%B4%ED%8A%B8-serviceaccount-%EC%96%B4%EB%93%9C%EB%AF%B8%EC%85%98-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;서비스 어카운트 어드미션 컨트롤러&lt;/a&gt;&lt;/span&gt;는 토큰 컨트롤러에서 생성한 만료되지 않은 서비스 계정 토큰에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;시크릿 기반 볼륨&lt;/span&gt; 대신 다음과 같은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프로젝티드 볼륨&lt;/span&gt;을 추가한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380a981dacdce157f96a1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;- name: kube-api-access-&amp;lt;random-suffix&amp;gt;
  projected:
    defaultMode: 420 # 420은 rw- 로 소유자는 읽고쓰기 권한과 그룹내 사용자는 읽기만, 보통 0644는 소유자는 읽고쓰고실행 권한과 나머지는 읽고쓰기 권한
    sources:
      - serviceAccountToken:
          expirationSeconds: 3607
          path: token
      - configMap:
          items:
            - key: ca.crt
              path: ca.crt
          name: kube-root-ca.crt
      - downwardAPI:
          items:
            - fieldRef:
                apiVersion: v1
                fieldPath: metadata.namespace
              path: namespace&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380149646f07e334f80a4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로젝티드 볼륨은 세 가지로 구성된다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PSAT&lt;/span&gt; (Projected Service Account Tokens)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23806b8792f27f1a204ec1&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/ff786909-c6a7-4cc5-9abc-ba8c9d3b0333/CleanShot_2025-03-07_at_14.04.34.png?table=block&amp;amp;id=1efb8b2c-1c23-806b-8792-f27f1a204ec1&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=OsjlKYHVV6tevsfO8y1nmKd2oWSdXabzPb6fjB08oP4&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;294.0551905387648&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f18dc1f98a0eb96ab8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;kube-apiserver&lt;/code&gt;로부터 TokenRequest API를 통해 얻은&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;서비스어카운트토큰(ServiceAccountToken)&lt;/code&gt;. 서비스어카운트토큰은 기본적으로 1시간 뒤에, 또는 파드가 삭제될 때 만료된다. 서비스어카운트토큰은 파드에 연결되며 kube-apiserver를 위해 존재한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23801e9f6bc0719750bfb9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kube-apiserver에 대한 연결을 확인하는 데 사용되는 CA 번들을 포함하는&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;컨피그맵(ConfigMap)&lt;/code&gt;.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380249ae3e387b8ea3d3b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;파드의 네임스페이스를 참조하는&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;DownwardA&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380f3b040e68b2a92fbda&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23809fa8fdfef0faac50f9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Configure a Pod to Use a Projected Volume for Storage&lt;/span&gt; : 시크릿 컨피그맵 downwardAPI serviceAccountToken의 볼륨 마운트를 하나의 디렉터리에 통합 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/docs/tasks/configure-pod-container/configure-projected-volume-storage/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380529abbdb5ec30d6294&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;This page shows how to use a&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/docs/concepts/storage/volumes/#projected&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;projected&lt;/a&gt;&lt;/code&gt;&amp;nbsp;Volume to mount several existing volume sources into the same directory. Currently,&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;secret&lt;/code&gt;,&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;configMap&lt;/code&gt;,&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;downwardAPI&lt;/code&gt;, and&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;serviceAccountToken&lt;/code&gt;&amp;nbsp;volumes can be projected.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23804db075da2c4b775ad1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Note:&amp;nbsp;&lt;/span&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;serviceAccountToken&lt;/code&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;nbsp;is not a volume type.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23806fa5d0fdd41b90fcc0&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;apiVersion: v1
kind: Pod
metadata:
  name: test-projected-volume
spec:
  containers:
  - name: test-projected-volume
    image: busybox:1.28
    args:
    - sleep
    - &quot;86400&quot;
    volumeMounts:
    - name: all-in-one
      mountPath: &quot;/projected-volume&quot;
      readOnly: true
  volumes:
  - name: all-in-one
    projected:
      sources:
      - secret:
          name: user
      - secret:
          name: pass&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380ed8ba0cc3018b995e9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# Create the Secrets:
## Create files containing the username and password:
echo -n &quot;admin&quot; &amp;gt; ./username.txt
echo -n &quot;1f2d1e2e67df&quot; &amp;gt; ./password.txt

## Package these files into secrets:
kubectl create secret generic user --from-file=./username.txt
kubectl create secret generic pass --from-file=./password.txt

# 파드 생성
kubectl apply -f https://k8s.io/examples/pods/storage/projected.yaml

# 파드 확인
kubectl get pod test-projected-volume -o yaml | kubectl neat
...
volumes:
  - name: all-in-one
    projected:
      defaultMode: 420
      sources:
      - secret:
          name: user
      - secret:
          name: pass
  - name: kube-api-access-n6n9v
    projected:
      defaultMode: 420
      sources:
      - serviceAccountToken:
          expirationSeconds: 3607
          path: token
      - configMap:
          items:
          - key: ca.crt
            path: ca.crt
          name: kube-root-ca.crt
      - downwardAPI:
          items:
          - fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
            path: namespace

# 시크릿 확인
kubectl exec -it test-projected-volume -- ls /projected-volume/
password.txt  username.txt

kubectl exec -it test-projected-volume -- cat /projected-volume/username.txt ;echo
admin

kubectl exec -it test-projected-volume -- cat /projected-volume/password.txt ;echo
1f2d1e2e67df

# 삭제
kubectl delete pod test-projected-volume &amp;amp;&amp;amp; kubectl delete secret user pass&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380c68a31f19d74e377d4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23806a9a87e7d51293d9ff&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;k8s api 접근 단계&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380408f35d31702a28ffb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AuthN&lt;/span&gt; &amp;rarr; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AuthZ&lt;/span&gt; &amp;rarr; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Admisstion Control&lt;/span&gt; 권한이 있는 사용자에 한해서 관리자(Admin)가 특정 행동을 제한(validate) 혹은 변경(mutate) - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://coffeewhale.com/kubernetes/admission-control/2021/04/28/opa1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크&lt;/a&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://slack.engineering/simple-kubernetes-webhook/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Slack&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380fb83c4ce3942ecc036&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;AuthN &amp;amp; AuthZ - &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;MutatingWebhook&lt;/span&gt; - Object schema validation - &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ValidatingWebhook&lt;/span&gt; &amp;rarr; etcd&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23807fb8d6cda5607fe731&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://kubernetes.io/blog/2019/03/21/a-guide-to-kubernetes-admission-controllers/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F003dc24f-5971-45f4-922d-bde77e3cd733%2FUntitled.png?id=1efb8b2c-1c23-807f-b8d6-cda5607fe731&amp;amp;table=block&quot; alt=&quot;https://kubernetes.io/blog/2019/03/21/a-guide-to-kubernetes-admission-controllers/&quot; width=&quot;1104&quot; height=&quot;411.1924882629108&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380268671cc34457a7c8f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Admission Control도 Webhook으로 사용자에게 API가 열려있고, 사용자는 자신만의 Admission Controller를 구현할 수 있으며, 이를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Dynamic&lt;/span&gt; Admission Controller라고 부르고, 크게 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;MutatingWebhook&lt;/span&gt; 과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ValidatingWebhook&lt;/span&gt; 로 나뉩니다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23809faee4f72d7ff99407&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;MutatingWebhook&lt;/code&gt;은 사용자가 요청한 request에 대해서 관리자가 임의로 값을 변경하는 작업입니다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b39399fdc9e889ab72&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ValidatingWebhook&lt;/code&gt;은 사용자가 요청한 request에 대해서 관리자기 허용을 막는 작업입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380de9131eb404dc36be4&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
kubectl get mutatingwebhookconfigurations
NAME                              WEBHOOKS   AGE
aws-load-balancer-webhook         3          98m
kube-prometheus-stack-admission   1          96m
pod-identity-webhook              1          175m
vpc-resource-mutating-webhook     1          175m

#
kubectl get validatingwebhookconfigurations
NAME                              WEBHOOKS   AGE
aws-load-balancer-webhook         3          97m
kube-prometheus-stack-admission   1          96m
vpc-resource-validating-webhook   2          175m&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238033bf46f692b3fc05eb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23800b843af815d051be86&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;JWT&lt;/code&gt; : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Bearer type - JWT(JSON Web Token) &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #d7730f;&quot; class=&quot;highlighted-color color-orange&quot;&gt;X.509 Certificate&lt;/span&gt;의 &lt;span style=&quot;box-sizing: border-box; color: #d7730f;&quot; class=&quot;highlighted-color color-orange&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;lightweight JSON&lt;/span&gt;&lt;/span&gt; 버전&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d2a0c2f415b99d1228&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Bearer type 경우, 서버에서 지정한 어떠한 문자열도 입력할 수 있습니다. 하지만 굉장히 허술한 느낌을 받습니다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23801b98f9f603d390f601&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 보완하고자 쿠버네티스에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Bearer 토큰&lt;/span&gt;을 전송할 때 주로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;JWT&lt;/span&gt; (JSON Web Token) 토큰을 사용합니다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23809cbbf3e7c611c2cd95&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;JWT&lt;/span&gt;는 X.509 Certificate와 마찬가지로 private key를 이용하여 토큰을 서명하고 public key를 이용하여 서명된 메세지를 검증합니다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ad8e6bf6776c49d7f2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이러한 메커니즘을 통해 해당 토큰이 쿠버네티스를 통해 생성된 valid한 토큰임을 인증할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238042a734f592e4cc1580&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #d7730f;&quot; class=&quot;highlighted-color color-orange&quot;&gt;X.509 Certificate&lt;/span&gt;의 &lt;span style=&quot;box-sizing: border-box; color: #d7730f;&quot; class=&quot;highlighted-color color-orange&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;lightweight JSON&lt;/span&gt;&lt;/span&gt; 버전이라고 생각하면 편리합니다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23805da98af662b8a793a9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;jwt&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;JSON&lt;/span&gt; 형태로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;토큰&lt;/span&gt; 형식을 정의한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스펙&lt;/span&gt;입니다. jwt는 쿠버네티스에서 뿐만 아니라 다양한 웹 사이트에서 인증, 권한 허가, 세션관리 등의 목적으로 사용합니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380648c62f4f67bc4077f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Header&lt;/span&gt;: 토큰 형식와 암호화 알고리즘을 선언합니다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f896bce470aacb9db2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Payload&lt;/span&gt;: 전송하려는 데이터를 JSON 형식으로 기입합니다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c78116d37a01f85baa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Signature&lt;/span&gt;: Header와 Payload의 변조 가능성을 검증합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c238026b3fdead01165043a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;각 파트는 base64 URL 인코딩이 되어서&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;.&lt;/code&gt;으로 합쳐지게 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380c6987cd5489c8f601b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://research.securitum.com/jwt-json-web-token-security/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fb3202149-06b3-4a8d-87ae-4e592e8bbe21%2FUntitled.png?id=1efb8b2c-1c23-80c6-987c-d5489c8f601b&amp;amp;table=block&quot; alt=&quot;https://research.securitum.com/jwt-json-web-token-security/&quot; width=&quot;768&quot; height=&quot;353.4&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23803fb4b1d6db5cd4d31a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://coffeewhale.com/kubernetes/authentication/http-auth/2020/05/03/auth02/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Feb9aca58-8049-4d8c-99d0-d6f72ef836be%2FUntitled.png?id=1efb8b2c-1c23-803f-b4b1-d6db5cd4d31a&amp;amp;table=block&quot; alt=&quot;https://coffeewhale.com/kubernetes/authentication/http-auth/2020/05/03/auth02/&quot; width=&quot;624&quot; height=&quot;359.970479704797&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380339eb0cda6f42cc09c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://jwt.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Ff4ffe395-86f8-4430-aa27-0bc14c7b0151%2FUntitled.png?id=1efb8b2c-1c23-8033-9eb0-cda6f42cc09c&amp;amp;table=block&quot; alt=&quot;https://jwt.io/&quot; width=&quot;720&quot; height=&quot;554.7738693467337&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238078a8ccc5badc76eb79&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(심화 참고) JWT 소개 추천 영상 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.youtube.com/watch?v=36lpDzQzVXs&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;생활코딩&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.youtube.com/watch?v=XXseiON9CV0&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;코딩애플&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238034baa9c42b54dabf0e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1efb8b2c1c2380b0b185e53bf8a58dff&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;OIDC&lt;/code&gt; : 사용자를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증&lt;/span&gt;해 사용자에게 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;액세스 권한&lt;/span&gt;을 부여할 수 있게 해주는 프로토콜 &amp;rArr; [커피고래]님 블로그 OpenID Connect - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://coffeewhale.com/kubernetes/authentication/oidc/2020/05/04/auth03/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크&lt;/a&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23803e9fe0f9206fda4071&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;OAuth 2.0&lt;/span&gt; : 권한허가 처리 프로토콜, 다른 서비스에 접근할 수 있는 권한을 획득하거나 반대로 다른 서비스에게 권한을 부여할 수 있음 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.youtube.com/watch?v=hm2r6LtUbk8&amp;amp;list=PLuHgQVnccGMA4guyznDlykFJh28_R08Q-&amp;amp;ab_channel=%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;생활코딩&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238010a504e0a0566632de&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;위임 권한 부여&lt;/span&gt; Delegated &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Authorization&lt;/span&gt;, 사용자 인증 보다는 제한된 사람에게(혹은 시스템) 제한된 권한을 부여하는가, 예) 페이스북 posting 권한&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23803798f3f940fb6a6add&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Access Token&lt;/span&gt; : 발급처(OAuth 2.0), 서버의 리소스 접근 권한&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c23806a80b4d558f9f22de5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;OpenID&lt;/span&gt; : 비영리기관인 OpenID Foundation에서 추진하는 개방형 표준 및 분산 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증 Authentication&lt;/span&gt; 프로토콜, 사용자 인증 및 사용자 정보 제공(id token) - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://openid.net/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238061ba3fe718c6b47df4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ID Token&lt;/span&gt; : 발급처(OpenID Connect), 유저 프로필 정보 획득&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c23801a8a7afe5d5836dd43&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;OIDC&lt;/span&gt; OpenID Connect = OpenID &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증&lt;/span&gt; + OAuth2.0 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가&lt;/span&gt;, JSON 포맷을 이용한 RESful API 형식으로 인증 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://hudi.blog/open-id/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380aabbcfc2d8aac323a0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;iss&lt;/code&gt;: 토큰 발행자&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23805b9cabe4c8a71c00fe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;sub&lt;/code&gt;: 사용자를 구분하기 위한 유니크한 구분자&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238098823be04aeb552f29&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;email&lt;/code&gt;: 사용자의 이메일&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380faab28d7ff3b1d2ac0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;iat&lt;/code&gt;: 토큰이 발행되는 시간을 Unix time으로 표기한 것&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380fa808ef46c8b03bd2b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;exp&lt;/code&gt;: 토큰이 만료되는 시간을 Unix time으로 표기한 것&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380fab074d5730ab4e4aa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;aud&lt;/code&gt;: ID Token이 어떤 Client를 위해 발급된 것인지.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e584e4e725a401dacb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IdP&lt;/span&gt; Open Identify Provider : 구글, 카카오와 같이 OpenID 서비스를 제공하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;신원 제공자.&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23803bb246c5045d2f3232&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;OpenID Connect에서 IdP의 역할을 OAuth가 수행 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://coffeewhale.com/kubernetes/authentication/oidc/2020/05/04/auth03/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e7a403e933b56b0a78&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RP&lt;/span&gt; Relying Party : 사용자를 인증하기 위해 IdP에 의존하는 주체&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380799ff9dbed6cc5f595&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380e59facd3abf7d4c5f5&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.4.1 JSON 웹 토큰이란 무엇인가?&lt;/span&gt; - &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://ko.wikipedia.org/wiki/JSON_%EC%9B%B9_%ED%86%A0%ED%81%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;wiki&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;* &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습~)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380bfbdd7c725219d4004&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오에서 JWT를 사용해 최종 사용자 인증 및 인가를 지원한다는 사실은 앞서 간단히 언급했다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ac9271d94f262eb9c6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청의 인증 및 인가가 작동하는 방식을 자세히 다루기 전에 JWT를 간단히 살펴보자.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380aea2cfc2c6054d1ece&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 주제에 대한 기본 지식을 이미 갖췄다면 다음 절로 건너뛰어도 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238011bd3ed7a0b316c4fc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c0b5cce0f8f255254f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;JWT는 클라이언트르 서버에 인증하는 데 사용하는 간단한 클레임 표현이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;A JWT is a compact claims representation used to authenticate a client to a server.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380a19076f42e02815910&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;JWT는 다음 세 가지 부분으로 이뤄져 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23807eb193d4afba477d61&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;헤더 : 유형 및 해싱 알고리듬으로 구성&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238080a9ded2db3dc12324&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;페이로드 : 사용자 클레임 포함&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23809d9daeef3ce97e768a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서명 : JWT의 진위 여부를 파악하는 데 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380ddb184f3a316beab82&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c23802e85a7f76bccb2a2ee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 세 부분, 즉 헤더, 페이로드, 서명이 점(.)으로 구분되고 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Base64 URL&lt;/code&gt;로 인코딩되기 때문에 JWT는 HTTP 요청으로 사용하기에 매우 적합하다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238088a14fcc3278867900&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ch9/enduser/user.jwt&lt;/code&gt; 에 있는 토큰의 내용물을 확인해보고, 페이로드를 디코딩해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238092b165d6e825af803e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
cat ./ch9/enduser/user.jwt

# 디코딩 방법 1
jwt decode $(cat ./ch9/enduser/user.jwt)

# 디코딩 방법 2
cat ./ch9/enduser/user.jwt | cut -d '.' -f1 | base64 --decode | sed 's/$/}/'  | jq
cat ./ch9/enduser/user.jwt | cut -d '.' -f2 | base64 --decode | sed 's/$/&quot;}/' | jq
{
  &quot;exp&quot;: 4745145038, # 만료 시간 Expiration time
  &quot;group&quot;: &quot;user&quot;,   # 'group' 클레임
  &quot;iat&quot;: 1591545038, # 발행 시각 Issue time
  &quot;iss&quot;: &quot;auth@istioinaction.io&quot;, # 토큰 발행자 Token issuer
  &quot;sub&quot;: &quot;9b792b56-7dfa-4e4b-a83f-e20679115d79&quot; # 토큰의 주체 Subject or principal of the token
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23804b8262dfa9210dca3b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d08b6cc12004a9fed9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 데이터는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;주체&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;subject&lt;/span&gt; 에 대한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클레임&lt;/span&gt;을 표현한다. 클레임 덕분에 서비스는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라이언트의 ID&lt;/span&gt; 및 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가&lt;/span&gt;를 판단할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;claims&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; enable the service to determine the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;identity&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; and &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;authorization&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; of a &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;client&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23801ab140c2ab11f94792&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 이 토큰이 사용자 그룹에 있는 주체에 속한다고 해보자. 서비스는 이 정보를 사용해 이 주체의 접근 수준을 결정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238062ab87e817f26bdbd1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클레임을 신뢰하려면 토큰이 검증될 수 있어야 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;For claims to be trusted, the token needs to be verifiable.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238054ac3ec32bd4e6da33&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380729d0ee37dd2a563da&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;JWT는 어떻게 발행되고 검증되는가?&lt;/u&gt;&lt;/span&gt; HOW IS A JWT ISSUED AND VALIDATED?&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380bba9fde2d5e57697e4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;JWT(JSON 웹 토큰)는 인증 서버에서 발급되는데, 인증 서버는 토큰을 서명하는 비밀 키와 검증하기 위한 공개 키를 갖고 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ae951ce6e20a60a79e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;공개 키&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;JWKS&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;J&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;SON &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;W&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;eb &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;K&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;ey &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;S&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;et&lt;/span&gt;, &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;JSON 웹 키셋&lt;/span&gt;&lt;/i&gt; 라고 하며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;well-known HTTP 엔드포인트&lt;/span&gt;에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;노출&lt;/span&gt;된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380749165e44ff52fcc15&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스는 이 엔드포인트에서 공개 키를 가져와 인증 서버가 발급한 토큰을 검증할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380319068cea9ae92d84e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238015bf2ddb7b6813c2f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인증 서버는 여러 솔루션으로 준비할 수 있다.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ef8aaaec2d7a1565f2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션 백엔드 프레임워크에서 구현할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b389bae8c39c48f759&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;OpenIAM 혹은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Keycloak&lt;/span&gt; 등의 서비스로, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자체적으로 구현&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23804ca758ed967eda35ef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Auth0, Okta 등의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스형&lt;/span&gt; ID &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Identity-as-a-Service&lt;/span&gt; 솔루션으로 구현할 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23807cb8dedde26843dd54&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-1efb8b2c1c238082814acc0fc1297231&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 9.12는 서버가 토큰을 검증하는 데 JWKS를 어떻게 사용하는지 시각화한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380a893ade1409b51a086&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;JWKS는 서명을 복호화하는 데 사용하는 공개 키를 포함한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e4a76bd8edb7b8a098&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서명을 복호화하고 토큰 데이터의 해시값과 비교하는데, 일치하면 토큰 클레임을 신뢰할 수 있다.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23806ca8a8d2ae4c2eba85&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/3c5953c3-4074-4e4b-b570-8e4bfad9a7c6/CleanShot_2025-05-04_at_14.57.18.png?table=block&amp;amp;id=1efb8b2c-1c23-806c-a8a8-d2ae4c2eba85&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=C5Rr6HuRl_V5gGjxgXO7FD9YtCon4S07rTRD-n7DNkA&quot; alt=&quot;서버는 클라이언트가 제시한 토큰을 검증하기 위해 JWKS를 가져온다.&quot; width=&quot;864&quot; height=&quot;419.4947368421053&quot; /&gt;서버는 클라이언트가 제시한 토큰을 검증하기 위해 JWKS를 가져온다.&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23804585d8d84f0fd560bc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인증서버는 &amp;ldquo;토큰 서명&amp;rdquo;을 위한&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;private key&lt;/code&gt;&amp;nbsp;와 &amp;ldquo;토큰 검증&amp;rdquo;을 위한&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;public key&lt;/code&gt;를 가지고 있음&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d38159e0fd54dba4d7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인증서버에서&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;private key&lt;/code&gt;&amp;nbsp;로 서명한 JWT (JSON Web Token) 을 발급&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238079934ee7115e959f58&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인증서버의&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;public key&lt;/code&gt;는 JWKS (JSON Web Key Set) 형태의 HTTP 엔드포인트로 제공&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238083ae8fd07adc80f2a3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스는 인증서버에서 발급된 JWT 를 검증하기 위해 필요한&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;public key&lt;/code&gt;를 JWKS 에서 찾습니다&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f3a771cf7b672254a3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;public key&lt;/code&gt;로 JWT 서명을 복호화 하여 얻은 해시값과 JWT 토큰 데이터의 해시값을 비교하여&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238041a220dae54a0ecd28&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;해시값이 동일할 경우 토큰&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;claim&lt;/code&gt;에 변조가 없었음을 보장하므로 신뢰할 수 있습니다&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23802bba12e60faf9cbb4b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380afac46eb2587ae1038&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin-top: 1px; margin-bottom: 1px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.4.2 인그레스 게이트웨이에서의 최종 사용자 인증 및 인가&lt;/span&gt; End-user authentication and authorization at the ingress gateway&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380fb9480fffd680eb416&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 워크로드가 JWT로 최종 사용자 요청을 인증하고 인가하도록 설정할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Istio workloads can be configured to authenticate and authorize end-user requests with JWTs.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23800a8d62cfdfb04ac63f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;최종 사용자&lt;/span&gt;란&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; ID 제공자&lt;/span&gt;에게 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증&lt;/span&gt;받고&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; ID&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클레임&lt;/span&gt;을 나타내는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 토큰&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;발급받은 사용자&lt;/span&gt;를 말한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;End user means the user that was authenticated by an identity provider and received a token issued to represent its identity and claims.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23800a9a42e4212674090a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b2ac33fa6b0743a130&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;최종 사용자 인&lt;/span&gt;가는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모든 워크로드 수준&lt;/span&gt;에서 수행할 수 있지만, 보통은&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 이스티오 인그레스 게이트웨이&lt;/span&gt;에서 수행한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238056b97dd45b2c2ce028&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이렇게 하면 유효하지 않은 요청을 조기에 거부하므로 성능이 좋아진다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;This improves performance, as invalid requests are rejected early on.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23802ab389c93320fb1931&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 요청에서 JWT를 제거하는데, 후속 서비스가 사고로 유출되거나 악의적인 사용자가 재전송 공격 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;replay attack&lt;/span&gt; 에 사용하는 것을 방지하기 위해서다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d48bd3c81c756d9c8d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23802abd4dcdf1beadb89f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습 환경 준비&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380b1abddeb21a7c794e8&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
kubectl delete virtualservice,deployment,service,\
destinationrule,gateway,peerauthentication,authorizationpolicy --all -n istioinaction

#
kubectl delete peerauthentication,authorizationpolicy -n istio-system --all

# 삭제 확인
kubectl get gw,vs,dr,peerauthentication,authorizationpolicy -A


# 실습 환경 배포
kubectl apply -f services/catalog/kubernetes/catalog.yaml -n istioinaction
kubectl apply -f services/webapp/kubernetes/webapp.yaml -n istioinaction
cat ch9/enduser/ingress-gw-for-webapp.yaml
kubectl apply -f ch9/enduser/ingress-gw-for-webapp.yaml -n istioinaction
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23802588d3cb982c881d5e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380be9eebc9a521b5e742&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.4.3 RequestAuthentication으로 JWT 검증하기*&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt; &lt;/span&gt;Validating JWTs with RequestAuthentication&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380b8869ff38ab4e63fab&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;들어가며&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1efb8b2c1c23807a8804d66eec7d911c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/614f2085-f5cd-4bdc-b424-a6db09660c74/CleanShot_2025-05-04_at_18.12.52.png?table=block&amp;amp;id=1efb8b2c-1c23-8047-94a7-d7057d00c58d&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=aJC2PbQR7g9QYIbwPK8sIALxGIRUauJtc9DVrhEnsls&quot; alt=&quot;부록 C.6 필터 메타데이터에서 검증된 데이터 수집&quot; width=&quot;696.960205078125&quot; height=&quot;329.9811587887823&quot; /&gt;부록 C.6 필터 메타데이터에서 검증된 데이터 수집&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d2bdd2cc2bff4d7d2a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/f2610f54-fcef-45c2-add0-b3e302597718/CleanShot_2025-05-01_at_15.31.03.png?table=block&amp;amp;id=1efb8b2c-1c23-80e2-b7c5-dec486dd70d7&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=oi4eiTzKuE3LRug7hO34f15sChaNut5qbLe7GVwDrNU&quot; alt=&quot;요청을 인증 및 인가하도록 서비스 프록시를 구성하는 리소스&quot; width=&quot;720&quot; height=&quot;542.9508196721312&quot; /&gt;요청을 인증 및 인가하도록 서비스 프록시를 구성하는 리소스&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238013b1a5c1da572dc4a9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380cca673da8a1fd1402f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RequestAuthentication&lt;/span&gt; 리소스의 주목적은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;JWT를 검증&lt;/span&gt;하고, 유효한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;토큰의 클레임&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;추출&lt;/span&gt;하고, 이 클레임을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터 메타데이터에 저장&lt;/span&gt;하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238090b853fc5efaf2eb71&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 필터 메타데이터는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가 정책이 조치를 취하는 근거&lt;/span&gt;로 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23803aa75cdc2ade95bf6d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터 메타데이터&lt;/span&gt;란 서비스 프록시에서 필터 간 요청을 처리하는 동안 사용할 수 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;키-값 쌍의 모음&lt;/span&gt;을 말한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23803eb435cfbaaa0a5282&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 사용자로서 이것은 대부분 구현 세부 사항에 해당한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23800ca415e739b813c43b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 클레임 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;group: admin&lt;/code&gt; 이 있는 요청이 검증되면 이 값은 필터 메타데이터로 저장되며, 필터 메타데이터는 인가 정책이 요청을 허용하거나 거부하는 데 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238092ac90f068c8f67c2d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;최종 사용자 요청에 따라 결과는 셋 중 하나가 된다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23807594c3cff9e66b1244&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;유효한 토큰을 갖고 있는 요청은 클러스터로 받아들여지며, 이들의 클레임은 필터 메타데이터 형태로 정책에 전달된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23807eaf7ee33252a7a78d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;유효하지 않은 토큰을 갖고 있는 요청은 거부된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23803f91dfc3db556addb9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;토큰이 없는 요청은 클러스터로 받아들여지지만 요청 ID가 없다. 즉, 어떤 클레임도 필터 메타데이터에 저장되지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23807b8eedcb969b4262e5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c23806ca5add0ae1b4032ca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;JWT가 있는 요청과 JWT가 없는 요청은 무엇이 다를까?&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f38155fb083d2f2be9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;JWT가 있는 요청은 RequestAuthentication 필터로 검증되고 JWT 클레임이 커넥션 필터 메타데이터에 저장돼 있는 반면,&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380958848ec1b8942b092&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;JWT가 없는 요청은 커넥션 필터 메타데이터에 클레임이 없다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23807c83b5cb36a094a70c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서 암시하는 중요한 세부 사항은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RequestAuthentication 리소스&lt;/span&gt; 그 자체는 인가를 적용하지 않는다(&amp;rsquo;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가를 강제하지 않는다&lt;/span&gt;&amp;rsquo;)는 것이다. 토큰 검증과&amp;nbsp;claim&amp;nbsp;추출을 통해 인증의 유효성을 검증하고 인가에서 활용할 정보를 저장하는 역할을 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;An important implicit detail here is that RequestAuthentication resources by themselves do not enforce authorizations.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e798acea8df7da37b2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉, 인가를 위해서는 여전히 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AuthorizationPolicy 가 필요&lt;/span&gt;하다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;You still need an AuthorizationPolicy for that.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23806d999fff4f4361e7d7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380679c6ad329c7e3dfd3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 절에서는 RequestAuthentication 리소스를 만들고, 앞서 언급한 경우 모두를 실제 예제와 함께 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238057b3b1fd47ec7ab277&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380dab5bec42ea8d95f78&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;RequestAuthentication 리소스 만들기&lt;/u&gt;&lt;/span&gt; CREATING A REQUESTAUTHENTICATION RESOURCE&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380feb837f089ff31bbfa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 RequestAuthentication 리소스는 이스티오의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인그레스 게이트웨이&lt;/span&gt;에 적용된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23800db962c397a5c69785&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 인그레스 게이트웨이가 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;auth@istioinaction.io&lt;/code&gt; 에서 발급한 토큰을 검증하도록 설정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380fa8467e596a5d60bda&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# cat ch9/enduser/jwt-token-request-authn.yaml 
apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;RequestAuthentication&quot;
metadata:
  name: &quot;jwt-token-request-authn&quot;
  namespace: istio-system # 적용할 네임스페이스
spec:
  selector:
    matchLabels:
      app: istio-ingressgateway
  jwtRules:
  - issuer: &quot;auth@istioinaction.io&quot; # 발급자 Expected issuer
    jwks: | # 특정 JWKS로 검증
      { &quot;keys&quot;:[ {&quot;e&quot;:&quot;AQAB&quot;,&quot;kid&quot;:&quot;CU-ADJJEbH9bXl0tpsQWYuo4EwlkxFUHbeJ4ckkakCM&quot;,&quot;kty&quot;:&quot;RSA&quot;,&quot;n&quot;:&quot;zl9VRDbmVvyXNdyoGJ5uhuTSRA2653KHEi3XqITfJISvedYHVNGoZZxUCoiSEumxqrPY_Du7IMKzmT4bAuPnEalbY8rafuJNXnxVmqjTrQovPIerkGW5h59iUXIz6vCznO7F61RvJsUEyw5X291-3Z3r-9RcQD9sYy7-8fTNmcXcdG_nNgYCnduZUJ3vFVhmQCwHFG1idwni8PJo9NH6aTZ3mN730S6Y1g_lJfObju7lwYWT8j2Sjrwt6EES55oGimkZHzktKjDYjRx1rN4dJ5PR5zhlQ4kORWg1PtllWy1s5TSpOUv84OPjEohEoOWH0-g238zIOYA83gozgbJfmQ&quot;}]}
      
#
kubectl apply -f ch9/enduser/jwt-token-request-authn.yaml
kubectl get requestauthentication -A

#
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/istio-ingressgateway.istio-system
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/istio-ingressgateway.istio-system --port 8080 -o json
...
        &quot;httpFilters&quot;: [
                {
                    &quot;name&quot;: &quot;istio.metadata_exchange&quot;,
                    &quot;typedConfig&quot;: {
                        &quot;@type&quot;: &quot;type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm&quot;,
                        &quot;config&quot;: {
                            &quot;vmConfig&quot;: {
                                &quot;runtime&quot;: &quot;envoy.wasm.runtime.null&quot;,
                                &quot;code&quot;: {
                                    &quot;local&quot;: {
                                        &quot;inlineString&quot;: &quot;envoy.wasm.metadata_exchange&quot;
                                    }
                                }
                            },
                            &quot;configuration&quot;: {
                                &quot;@type&quot;: &quot;type.googleapis.com/envoy.tcp.metadataexchange.config.MetadataExchange&quot;
                            }
                        }
                    }
                },
                {
                    &quot;name&quot;: &quot;envoy.filters.http.jwt_authn&quot;,
                    &quot;typedConfig&quot;: {
                        &quot;@type&quot;: &quot;type.googleapis.com/envoy.extensions.filters.http.jwt_authn.v3.JwtAuthentication&quot;,
                        &quot;providers&quot;: {
                            &quot;origins-0&quot;: {
                                &quot;issuer&quot;: &quot;auth@istioinaction.io&quot;,
                                &quot;localJwks&quot;: {
                                    &quot;inlineString&quot;: &quot;{ \&quot;keys\&quot;:[ {\&quot;e\&quot;:\&quot;AQAB\&quot;,\&quot;kid\&quot;:\&quot;CU-ADJJEbH9bXl0tpsQWYuo4EwlkxFUHbeJ4ckkakCM\&quot;,\&quot;kty\&quot;:\&quot;RSA\&quot;,\&quot;n\&quot;:\&quot;zl9VRDbmVvyXNdyoGJ5uhuTSRA2653KHEi3XqITfJISvedYHVNGoZZxUCoiSEumxqrPY_Du7IMKzmT4bAuPnEalbY8rafuJNXnxVmqjTrQovPIerkGW5h59iUXIz6vCznO7F61RvJsUEyw5X291-3Z3r-9RcQD9sYy7-8fTNmcXcdG_nNgYCnduZUJ3vFVhmQCwHFG1idwni8PJo9NH6aTZ3mN730S6Y1g_lJfObju7lwYWT8j2Sjrwt6EES55oGimkZHzktKjDYjRx1rN4dJ5PR5zhlQ4kORWg1PtllWy1s5TSpOUv84OPjEohEoOWH0-g238zIOYA83gozgbJfmQ\&quot;}]}\n&quot;
                                },
                                &quot;payloadInMetadata&quot;: &quot;auth@istioinaction.io&quot;
                            }
                        },
                        &quot;rules&quot;: [
                            {
                                &quot;match&quot;: {
                                    &quot;prefix&quot;: &quot;/&quot;
                                },
                                &quot;requires&quot;: {
                                    &quot;requiresAny&quot;: {
                                        &quot;requirements&quot;: [
                                            {
                                                &quot;providerName&quot;: &quot;origins-0&quot;
                                            },
                                            {
                                                &quot;allowMissing&quot;: {}
                                            }
                                        ]
                                    }
                                }
                            }
                        ],
                        &quot;bypassCorsPreflight&quot;: true
                    }
                },
                {
                    &quot;name&quot;: &quot;istio_authn&quot;,
                    &quot;typedConfig&quot;: {
                        &quot;@type&quot;: &quot;type.googleapis.com/istio.envoy.config.filter.http.authn.v2alpha1.FilterConfig&quot;,
                        &quot;policy&quot;: {
                            &quot;origins&quot;: [
                                {
                                    &quot;jwt&quot;: {
                                        &quot;issuer&quot;: &quot;auth@istioinaction.io&quot;
                                    }
                                }
                            ],
                            &quot;originIsOptional&quot;: true,
                            &quot;principalBinding&quot;: &quot;USE_ORIGIN&quot;
                        },
                        &quot;skipValidateTrustDomain&quot;: true
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238011ac66e8258fdb288c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23808eb511cb938e53f930&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;유효한 발행자의 토큰이 있는 요청은 받아들여진다&lt;/u&gt;&lt;/span&gt; REQUESTS WITH TOKENS FROM VALID ISSUERS ARE ACCEPTED&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23805fa6d7c680b36aab37&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;유효한 JWT로 요청해보자&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380b5979bdd8d659795ce&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
cat ch9/enduser/user.jwt
USER_TOKEN=$(&amp;lt; ch9/enduser/user.jwt)
jwt decode $USER_TOKEN

Token header
------------
{
  &quot;typ&quot;: &quot;JWT&quot;,
  &quot;alg&quot;: &quot;RS256&quot;,
  &quot;kid&quot;: &quot;CU-ADJJEbH9bXl0tpsQWYuo4EwlkxFUHbeJ4ckkakCM&quot;
}

Token claims
------------
{
  &quot;exp&quot;: 4745145038,
  &quot;group&quot;: &quot;user&quot;,
  &quot;iat&quot;: 1591545038,
  &quot;iss&quot;: &quot;auth@istioinaction.io&quot;,
  &quot;sub&quot;: &quot;9b792b56-7dfa-4e4b-a83f-e20679115d79&quot;
}

# 호출 with TOKEN
curl -H &quot;Authorization: Bearer $USER_TOKEN&quot; \
     -sSl -o /dev/null -w &quot;%{http_code}&quot; webapp.istioinaction.io:30000/api/catalog

# istio-ingressgateway istio-proxy log level 변경
docker exec -it myk8s-control-plane istioctl proxy-config log deploy/istio-ingressgateway -n istio-system --level rbac:debug

# 로그
kubectl logs -n istio-system -l app=istio-ingressgateway -f 
[2025-05-10T16:59:10.177Z] &quot;GET /api/catalog HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 357 59 56 &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;629e2991-ae39-97b5-9d76-f90d8f7e5c06&quot; &quot;webapp.istioinaction.io:30000&quot; &quot;10.10.0.18:8080&quot; outbound|80||webapp.istioinaction.svc.cluster.local 10.10.0.6:40670 10.10.0.6:8080 192.168.65.1:58872 - -

# 호출 without TOKEN
curl \
     -sSl -o /dev/null -w &quot;%{http_code}&quot; webapp.istioinaction.io:30000/api/catalog
200

kubectl logs -n istio-system -l app=istio-ingressgateway -f 
[2025-05-10T17:00:46.638Z] &quot;GET /api/catalog HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 357 30 29 &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;133a1311-688b-970e-8f83-707bf122b0bf&quot; &quot;webapp.istioinaction.io:30000&quot; &quot;10.10.0.18:8080&quot; outbound|80||webapp.istioinaction.svc.cluster.local 10.10.0.6:60624 10.10.0.6:8080 192.168.65.1:24120 - -&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ee8883dadd77315329&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드에 적용된 인가 정책 AuthorizationPolicy 이 없으므로 기본적으로 token과 무관하게 허용 ALLOW 된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380a48ebae4c402b89dfe&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380ada938f7a176cf4fa5&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;유효하지 않은 발행자의 토큰이 있는 요청은 거부된다&lt;/u&gt;&lt;/span&gt; REQUESTS WITH TOKENS FROM INVALID ISSUERS ARE REJECTED&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b392bbfb90810cd5cf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;유효하지 않은 JWT로 요청해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380e689ccf6638b022d0e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
cat ch9/enduser/not-configured-issuer.jwt
WRONG_ISSUER=$(&amp;lt; ch9/enduser/not-configured-issuer.jwt)
jwt decode $WRONG_ISSUER

Token header
------------
{
  &quot;typ&quot;: &quot;JWT&quot;,
  &quot;alg&quot;: &quot;RS256&quot;,
  &quot;kid&quot;: &quot;CU-ADJJEbH9bXl0tpsQWYuo4EwlkxFUHbeJ4ckkakCM&quot;
}

Token claims
------------
{
  &quot;exp&quot;: 4745151548,
  &quot;group&quot;: &quot;user&quot;,
  &quot;iat&quot;: 1591551548,
  &quot;iss&quot;: &quot;old-auth@istioinaction.io&quot;, # issuer가 잘못된 JWT TOKEN
  &quot;sub&quot;: &quot;79d7506c-b617-46d1-bc1f-f511b5d30ab0&quot;
}


# 호출 
curl -H &quot;Authorization: Bearer $WRONG_ISSUER&quot; \
     -sSl -o /dev/null -w &quot;%{http_code}&quot; webapp.istioinaction.io:30000/api/catalog
401

# 로그
kubectl logs -n istio-system -l app=istio-ingressgateway -f
[2025-05-10T17:02:56.297Z] &quot;GET /api/catalog HTTP/1.1&quot; 401 - jwt_authn_access_denied{Jwt_issuer_is_not_configured} - &quot;-&quot; 0 28 0 - &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;06c046b1-7faa-985f-9b47-8a324d428205&quot; &quot;webapp.istioinaction.io:30000&quot; &quot;-&quot; outbound|80||webapp.istioinaction.svc.cluster.local - 10.10.0.6:8080 192.168.65.1:64353 - -&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238090abf4f84de14f99bf&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238077ac41dbec4b7c1c1c&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;토큰이 없는 요청은 클러스터로 받아들여진다&lt;/u&gt;&lt;/span&gt; REQUESTS WITHOUT TOKENS ARE ADMITTED INTO THE CLUSTER&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380bbbc5dd0b4ebe6d1a6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;토큰 없이 curl 요청 실행&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380bfa718f5d1bf9e470d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 호출 
curl -sSl -o /dev/null -w &quot;%{http_code}&quot; webapp.istioinaction.io:30000/api/catalog

# 로그
kubectl logs -n istio-system -l app=istio-ingressgateway -f
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380448c46effa984e8ab2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;응답 코드 요청이 클러스터로 받아들여졌음을 보여준다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23803293e5e863df82a46e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ef9dbeea9d3edab965&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;토큰이 없는 요청은 거부될 것으로 예상할 수 있으므로 혼란스러울 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238094b37bcdabd73943d5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 실제로는 애플리케이션의 프론트엔드에 서비스를 제공하는 등 요청에 토큰이 없는 시나리오가 많이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c5a885c8284c527189&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 이유로, 토큰이 없는 요청을 거부하려면 다음에 설명할 약간의 추가 작업이 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380958a6dec2247003bc9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380c6a3f4e887ea5d9b77&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;JWT가 없는 요청 거부하기&lt;/u&gt;&lt;/span&gt; DENYING REQUESTS WITHOUT JWTS&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380fbb8a2d7e8c768ca2a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;JWT가 없는 요청 거부하려면 명시적으로 거부하는 AuthorizationPolicy 리소스를 만들어야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238055abebd4af4d3e8b86&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 정책은 requestPrincipals 속성이 없는 source 에서 온 모든 요청에 적용되며, (action 속성에 지정된 대로) 요청을 거부한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238068a223ecc6f50880f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;requestPrincipals&lt;/span&gt;의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;초기화&lt;/span&gt; 방식을 하게 되면 놀랄지도 모르는데, 바로 JWT의 발행자 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;issuer&lt;/span&gt; 와 주체 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;subject&lt;/span&gt; 클레임을 &amp;lsquo;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;iss/sub&lt;/code&gt;&amp;rsquo; 형태로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;결합&lt;/span&gt;한 것이다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;You might be surprised where &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;requestPrincipals&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; is &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;initialized&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;: it is composed of the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;issuer&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; and &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;subject&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; JWT &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;claims&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; (concatenated in the format&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; iss/sub&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;).&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238087979eebb6f4b602b0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클레임&lt;/span&gt;은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RequestPrincipals&lt;/span&gt; 리소스로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증&lt;/span&gt;되고, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AuthorizationPolicy&lt;/span&gt; 필터 등 다른 필터가 사용할 수 있도록 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;커넥션 메타데이터&lt;/span&gt;로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;가공&lt;/span&gt;된다.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23801daa84cb9453701327&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# cat ch9/enduser/app-gw-requires-jwt.yaml # vi/vim, vscode 에서 포트 30000 추가
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: app-gw-requires-jwt
  namespace: istio-system
spec:
  selector:
    matchLabels:
      app: istio-ingressgateway
  action: DENY
  rules:
  - from:
    - source:
        notRequestPrincipals: [&quot;*&quot;] # 요청 주체에 값이 없는 source는 모두 해당된다
    to:
    - operation:
        hosts: [&quot;webapp.istioinaction.io:30000&quot;] # 이 규칙은 이 특정 호스트에만 적용된다

#
kubectl apply -f ch9/enduser/app-gw-requires-jwt.yaml

#
kubectl get AuthorizationPolicy -A
NAMESPACE      NAME                  AGE
istio-system   app-gw-requires-jwt   2m14s

docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/istio-ingressgateway.istio-system --port 8080 -o json
...
          {
              &quot;name&quot;: &quot;envoy.filters.http.rbac&quot;,
              &quot;typedConfig&quot;: {
                  &quot;@type&quot;: &quot;type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC&quot;,
                  &quot;rules&quot;: {
                      &quot;action&quot;: &quot;DENY&quot;,
                      &quot;policies&quot;: {
                          &quot;ns[istio-system]-policy[app-gw-requires-jwt]-rule[0]&quot;: {
                              &quot;permissions&quot;: [
                                  {
                                      &quot;andRules&quot;: {
                                          &quot;rules&quot;: [
                                              {
                                                  &quot;orRules&quot;: {
                                                      &quot;rules&quot;: [
                                                          {
                                                              &quot;header&quot;: {
                                                                  &quot;name&quot;: &quot;:authority&quot;,
                                                                  &quot;stringMatch&quot;: {
                                                                      &quot;exact&quot;: &quot;webapp.istioinaction.io:30000&quot;,
                                                                      &quot;ignoreCase&quot;: true
                                                                  }
                                                              }
                                                          }
                                                      ]
                                                  }
                                              }
                                          ]
                                      }
                                  }
                              ],
                              &quot;principals&quot;: [
                                  {
                                      &quot;andIds&quot;: {
                                          &quot;ids&quot;: [
                                              {
                                                  &quot;notId&quot;: {
                                                      &quot;orIds&quot;: {
                                                          &quot;ids&quot;: [
                                                              {
                                                                  &quot;metadata&quot;: {
                                                                      &quot;filter&quot;: &quot;istio_authn&quot;,
                                                                      &quot;path&quot;: [
                                                                          {
                                                                              &quot;key&quot;: &quot;request.auth.principal&quot;
                                                                          }
                                                                      ],
                                                                      &quot;value&quot;: {
                                                                          &quot;stringMatch&quot;: {
                                                                              &quot;safeRegex&quot;: {
                                                                                  &quot;regex&quot;: &quot;.+&quot;
...

# LDS에 의해서 Listener에 rules가 추가된것을 확인
kubectl logs -n istio-system -l app=istiod -f
2025-05-10T17:04:04.442056Z     info    ads     LDS: PUSH for node:istio-egressgateway-85df6b84b7-blp9q.istio-system resources:0 size:0B
2025-05-10T17:04:04.443263Z     info    ads     LDS: PUSH for node:istio-ingressgateway-6bb8fb6549-wq46d.istio-system resources:1 size:4.6kB
2025-05-10T17:04:04.445845Z     info    ads     LDS: PUSH for node:catalog-6cf4b97d-qfc6c.istioinaction resources:22 size:89.4kB
2025-05-10T17:04:04.446298Z     info    ads     LDS: PUSH for node:webapp-7685bcb84-7nphs.istioinaction resources:22 size:89.4kB


# 호출 1
curl -sSl -o /dev/null -w &quot;%{http_code}&quot; webapp.istioinaction.io:30000/api/catalog
403

# 로그
kubectl logs -n istio-system -l app=istio-ingressgateway -f
[2025-05-10T17:06:45.296Z] &quot;GET /api/catalog HTTP/1.1&quot; 403 - rbac_access_denied_matched_policy[ns[istio-system]-policy[app-gw-requires-jwt]-rule[0]] - &quot;-&quot; 0 19 1 - &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;779ba6b0-9e53-982d-ad6c-4f783c8cb7be&quot; &quot;webapp.istioinaction.io:30000&quot; &quot;-&quot; outbound|80||webapp.istioinaction.svc.cluster.local - 10.10.0.6:8080 192.168.65.1:62736 - -

# 호출 2
curl -H &quot;Authorization: Bearer $USER_TOKEN&quot; \
     -sSl -o /dev/null -w &quot;%{http_code}&quot; webapp.istioinaction.io:30000/api/catalog
200

# 로그
kubectl logs -n istio-system -l app=istio-ingressgateway -f
2025-05-10T17:06:50.125349Z     debug   envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:114        checking request: requestedServerName: , sourceIP: 192.168.65.1:63517, directRemoteIP: 192.168.65.1:63517, remoteIP: 192.168.65.1:63517,localAddress: 10.10.0.6:8080, ssl: none, headers: ':authority', 'webapp.istioinaction.io:30000'
':path', '/api/catalog'
':method', 'GET'
':scheme', 'http'
'user-agent', 'curl/8.7.1'
'accept', '*/*'
'x-forwarded-for', '192.168.65.1'
'x-forwarded-proto', 'http'
'x-envoy-internal', 'true'
'x-request-id', '0d8f5f5c-b5ec-9cb3-8c2a-1d2f9374f1b7'
'x-envoy-decorator-operation', 'webapp.istioinaction.svc.cluster.local:80/*'
'x-envoy-peer-metadata', 'ChQKDkFQUF9DT05UQUlORVJTEgIaAAoaCgpDTFVTVEVSX0lEEgwaCkt1YmVybmV0ZXMKGwoMSU5TVEFOQ0VfSVBTEgsaCTEwLjEwLjAuNgoZCg1JU1RJT19WRVJTSU9OEggaBjEuMTcuOAqcAwoGTEFCRUxTEpEDKo4DCh0KA2FwcBIWGhRpc3Rpby1pbmdyZXNzZ2F0ZXdheQoTCgVjaGFydBIKGghnYXRld2F5cwoUCghoZXJpdGFnZRIIGgZUaWxsZXIKNgopaW5zdGFsbC5vcGVyYXRvci5pc3Rpby5pby9vd25pbmctcmVzb3VyY2USCRoHdW5rbm93bgoZCgVpc3RpbxIQGg5pbmdyZXNzZ2F0ZXdheQoZCgxpc3Rpby5pby9yZXYSCRoHZGVmYXVsdAowChtvcGVyYXRvci5pc3Rpby5pby9jb21wb25lbnQSERoPSW5ncmVzc0dhdGV3YXlzChIKB3JlbGVhc2USBxoFaXN0aW8KOQofc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtbmFtZRIWGhRpc3Rpby1pbmdyZXNzZ2F0ZXdheQovCiNzZXJ2aWNlLmlzdGlvLmlvL2Nhbm9uaWNhbC1yZXZpc2lvbhIIGgZsYXRlc3QKIgoXc2lkZWNhci5pc3Rpby5pby9pbmplY3QSBxoFZmFsc2UKGgoHTUVTSF9JRBIPGg1jbHVzdGVyLmxvY2FsCi8KBE5BTUUSJxolaXN0aW8taW5ncmVzc2dhdGV3YXktNmJiOGZiNjU0OS13cTQ2ZAobCglOQU1FU1BBQ0USDhoMaXN0aW8tc3lzdGVtCl0KBU9XTkVSElQaUmt1YmVybmV0ZXM6Ly9hcGlzL2FwcHMvdjEvbmFtZXNwYWNlcy9pc3Rpby1zeXN0ZW0vZGVwbG95bWVudHMvaXN0aW8taW5ncmVzc2dhdGV3YXkKFwoRUExBVEZPUk1fTUVUQURBVEESAioACicKDVdPUktMT0FEX05BTUUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXk='
'x-envoy-peer-metadata-id', 'router~10.10.0.6~istio-ingressgateway-6bb8fb6549-wq46d.istio-system~istio-system.svc.cluster.local'
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238063ba6cd2571d8443f5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 토큰 없이 요청을 보내고, 요청 주체가 없기 때문에 인가하는 데 실패하는 것을 확인했다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23805e856ff9880c61d8f9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380c9ac62f4aedbdac630&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;JWT 클레임에 기반한 다양한 접근 수준&lt;/u&gt;&lt;/span&gt; DIFFERENT LEVELS OF ACCESS BASED ON JWT CLAIMS&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23807c9825d2133835572b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;유저별로 다른 접근 정책 설정해보자.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b2bca0c59eaacd3c2e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 예제에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;일반 사용자&lt;/span&gt;가 API에서 데이터를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;읽는 것은 허용&lt;/span&gt;하지만 새 데이터를 쓰거나 기존 데이터를 바꾸는 것은 금지한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238057b29de64ea12fdf78&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;한편, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;관리자&lt;/span&gt;에게는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모든 권한을 허용&lt;/span&gt;할 것이다. 각 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;토큰들은 클레임이 다름&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380e3835ee30202d94d14&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 일반 사용자 토큰 : 'group: user' 클레임
jwt decode $(cat ch9/enduser/user.jwt)
...
{
  &quot;exp&quot;: 4745145038,
  &quot;group&quot;: &quot;user&quot;,
  &quot;iat&quot;: 1591545038,
  &quot;iss&quot;: &quot;auth@istioinaction.io&quot;,
  &quot;sub&quot;: &quot;9b792b56-7dfa-4e4b-a83f-e20679115d79&quot;
}

# 관리자 토큰 : 'group: admin' 클레임
jwt decode $(cat ch9/enduser/admin.jwt)
...
{
  &quot;exp&quot;: 4745145071,
  &quot;group&quot;: &quot;admin&quot;,
  &quot;iat&quot;: 1591545071,
  &quot;iss&quot;: &quot;auth@istioinaction.io&quot;,
  &quot;sub&quot;: &quot;218d3fb9-4628-4d20-943c-124281c80e7b&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380c8a4a6eb4bd66c4167&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b9a16dff5e53780008&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;일반 사용자&lt;/span&gt;가 webapp 에서 데이터를 읽을 수 있게 허용하도록 AuthorizationPolicy 리소스 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380039dd4cf685e9ff5d6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# cat ch9/enduser/allow-all-with-jwt-to-webapp.yaml # vi/vim, vscode 에서 포트 30000 추가
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-all-with-jwt-to-webapp
  namespace: istio-system
spec:
  selector:
    matchLabels:
      app: istio-ingressgateway
  action: ALLOW
  rules:
  - from:
    - source:
        requestPrincipals: [&quot;auth@istioinaction.io/*&quot;] # 최종 사용자 요청 주체를 표현 Represents the end-user request principal
    to:
    - operation:
        hosts: [&quot;webapp.istioinaction.io:30000&quot;]
        methods: [&quot;GET&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380bbab34f5bb90e8b5de&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238017a10cdf5ee8b8f404&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;관리자&lt;/span&gt;에게 모든 작업을 허용하는 AuthorizationPolicy 리소스 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23807b83d3edf40d967019&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# cat ch9/enduser/allow-mesh-all-ops-admin.yaml
apiVersion: &quot;security.istio.io/v1beta1&quot;
kind: &quot;AuthorizationPolicy&quot;
metadata:
  name: &quot;allow-mesh-all-ops-admin&quot;
  namespace: istio-system
spec:
  selector:
    matchLabels:
      app: istio-ingressgateway
  action: ALLOW
  rules:
  - from:
    - source:
        requestPrincipals: [&quot;auth@istioinaction.io/*&quot;]
    when:
    - key: request.auth.claims[group]
      values: [&quot;admin&quot;] # 이 클레임을 포함한 요청만 허용.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380c3958be1f8bc8d157a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238040944ddbac7c072811&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380e8bb2fcc5d5e91798c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
kubectl apply -f ch9/enduser/allow-all-with-jwt-to-webapp.yaml
kubectl apply -f ch9/enduser/allow-mesh-all-ops-admin.yaml

#
kubectl get authorizationpolicy -A
NAMESPACE      NAME                           AGE
istio-system   allow-all-with-jwt-to-webapp   4s
istio-system   allow-mesh-all-ops-admin       4s
istio-system   app-gw-requires-jwt            5m45s

#
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/istio-ingressgateway.istio-system --port 8080 -o json
...
                &quot;policies&quot;: {
                    &quot;ns[istio-system]-policy[allow-all-with-jwt-to-webapp]-rule[0]&quot;: {
                        &quot;permissions&quot;: [
                            {
                                &quot;andRules&quot;: {
                                    &quot;rules&quot;: [
                                        {
                                            &quot;orRules&quot;: {
                                                &quot;rules&quot;: [
                                                    {
                                                        &quot;header&quot;: {
                                                            &quot;name&quot;: &quot;:authority&quot;,
                                                            &quot;stringMatch&quot;: {
                                                                &quot;exact&quot;: &quot;webapp.istioinaction.io:30000&quot;,
                                                                &quot;ignoreCase&quot;: true
...
                    &quot;ns[istio-system]-policy[allow-mesh-all-ops-admin]-rule[0]&quot;: {
                        &quot;permissions&quot;: [
                            {
                                &quot;andRules&quot;: {
                                    &quot;rules&quot;: [
                                        {
                                            &quot;any&quot;: true
                                        }
                                    ]
                                }
                            }
                        ],
                        &quot;principals&quot;: [
                            {
                                &quot;andIds&quot;: {
                                    &quot;ids&quot;: [
                                        {
                                            &quot;orIds&quot;: {
                                                &quot;ids&quot;: [
                                                    {
                                                        &quot;metadata&quot;: {
                                                            &quot;filter&quot;: &quot;istio_authn&quot;,
                                                            &quot;path&quot;: [
                                                                {
                                                                    &quot;key&quot;: &quot;request.auth.principal&quot;
                                                                }
                                                            ],
                                                            &quot;value&quot;: {
                                                                &quot;stringMatch&quot;: {
                                                                    &quot;prefix&quot;: &quot;auth@istioinaction.io/&quot;
                                                                }
                                                            }
                                                        }
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            &quot;orIds&quot;: {
                                                &quot;ids&quot;: [
                                                    {
                                                        &quot;metadata&quot;: {
                                                            &quot;filter&quot;: &quot;istio_authn&quot;,
                                                            &quot;path&quot;: [
                                                                {
                                                                    &quot;key&quot;: &quot;request.auth.claims&quot;
                                                                },
                                                                {
                                                                    &quot;key&quot;: &quot;group&quot;
                                                                }
                                                            ],
                                                            &quot;value&quot;: {
                                                                &quot;listMatch&quot;: {
                                                                    &quot;oneOf&quot;: {
                                                                        &quot;stringMatch&quot;: {
                                                                            &quot;exact&quot;: &quot;admin&quot;
...

# LDS에 의해 Listener에 rules 추가된것 확인
kubectl logs -n istio-system -l app=istiod -f
2025-05-10T17:09:45.833993Z     info    ads     Push debounce stable[81] 2 for config AuthorizationPolicy/istio-system/allow-mesh-all-ops-admin and 1 more configs: 100.165208ms since last change, 169.961083ms since last push, full=true
2025-05-10T17:09:45.834798Z     info    ads     XDS: Pushing:2025-05-10T17:09:45Z/65 Services:14 ConnectedEndpoints:4 Version:2025-05-10T17:09:45Z/65
2025-05-10T17:09:45.836436Z     info    ads     LDS: PUSH for node:istio-egressgateway-85df6b84b7-blp9q.istio-system resources:0 size:0B
2025-05-10T17:09:45.837511Z     info    ads     LDS: PUSH for node:istio-ingressgateway-6bb8fb6549-wq46d.istio-system resources:1 size:5.2kB
2025-05-10T17:09:45.839211Z     info    ads     LDS: PUSH for node:webapp-7685bcb84-7nphs.istioinaction resources:22 size:89.4kB
2025-05-10T17:09:45.839517Z     info    ads     LDS: PUSH for node:catalog-6cf4b97d-qfc6c.istioinaction resources:22 size:89.4kB


# 수집된 메타데이터를 관찰하고자 서비스 프록시에 rbac 로거 설정
## 기본적으로 envoy rbac 로거는 메타데이터를 로그에 출력하지 않는다. 출력을 위해 로깅 수준을 debug 로 설정하자
docker exec -it myk8s-control-plane istioctl proxy-config log deploy/istio-ingressgateway -n istio-system --level rbac:debug


# 일반유저 : [GET]과 [POST] 호출
USER_TOKEN=$(&amp;lt; ch9/enduser/user.jwt)

curl -H &quot;Authorization: Bearer $USER_TOKEN&quot; \
     -sSl -o /dev/null -w &quot;%{http_code}\n&quot; webapp.istioinaction.io:30000/api/catalog

curl -H &quot;Authorization: Bearer $USER_TOKEN&quot; \
     -XPOST webapp.istioinaction.io:30000/api/catalog \
     --data '{&quot;id&quot;: 2, &quot;name&quot;: &quot;Shoes&quot;, &quot;price&quot;: &quot;84.00&quot;}'

# 로그
# get 요청에 대해서는 성공했으나, post 요청에 대해서는 error
# allow-all-with-jwt-to-webapp authorizationPolicy에 정의된데로 jwt claim의 group이 user인 경우, GET 요청에 대해서만 ALLOW 됨
kubectl logs -n istio-system -l app=istio-ingressgateway -f
...
, dynamicMetadata: filter_metadata {
  key: &quot;envoy.filters.http.jwt_authn&quot;
  value {
    fields {
      key: &quot;auth@istioinaction.io&quot;
      value {
        struct_value {
          fields {
            key: &quot;exp&quot;
            value {
              number_value: 4745145038
            }
          }
          fields {
            key: &quot;group&quot;
            value {
              string_value: &quot;user&quot;
            }
          }
...
[2025-05-10T17:11:52.619Z] &quot;POST /api/catalog HTTP/1.1&quot; 403 - rbac_access_denied_matched_policy[none] - &quot;-&quot; 0 19 1 - &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;adf4b9dc-f7dd-99d5-989f-49ea791cdc18&quot; &quot;webapp.istioinaction.io:30000&quot; &quot;-&quot; outbound|80||webapp.istioinaction.svc.cluster.local - 10.10.0.6:8080 192.168.65.1:25633 - -

# 관리자 : [GET]과 [POST] 호출
ADMIN_TOKEN=$(&amp;lt; ch9/enduser/admin.jwt)

curl -H &quot;Authorization: Bearer $ADMIN_TOKEN&quot; \
     -sSl -o /dev/null -w &quot;%{http_code}\n&quot; webapp.istioinaction.io:30000/api/catalog
200

curl -H &quot;Authorization: Bearer $ADMIN_TOKEN&quot; \
     -XPOST webapp.istioinaction.io:30000/api/catalog \
     --data '{&quot;id&quot;: 2, &quot;name&quot;: &quot;Shoes&quot;, &quot;price&quot;: &quot;84.00&quot;}'
[{&quot;id&quot;:1,&quot;color&quot;:&quot;amber&quot;,&quot;department&quot;:&quot;Eyewear&quot;,&quot;name&quot;:&quot;Elinor Glasses&quot;,&quot;price&quot;:&quot;282.00&quot;},{&quot;id&quot;:2,&quot;color&quot;:&quot;cyan&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Atlas Shirt&quot;,&quot;price&quot;:&quot;127.00&quot;},{&quot;id&quot;:3,&quot;color&quot;:&quot;teal&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Small Metal Shoes&quot;,&quot;price&quot;:&quot;232.00&quot;},{&quot;id&quot;:4,&quot;color&quot;:&quot;red&quot;,&quot;department&quot;:&quot;Watches&quot;,&quot;name&quot;:&quot;Red Dragon Watch&quot;,&quot;price&quot;:&quot;232.00&quot;}]

# 로그
# get, post 요청에 대해서는 모두 성공
# allow-mesh-all-ops-admin authorizationPolicy에 정의된데로 jwt claim의 group이 admin인 경우, GET,POST 모두 ALLOW 됨
kubectl logs -n istio-system -l app=istio-ingressgateway -f
2025-05-10T17:15:17.636683Z     debug   envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:114        checking request: requestedServerName: , sourceIP: 192.168.65.1:55478, directRemoteIP: 192.168.65.1:55478, remoteIP: 192.168.65.1:55478,localAddress: 10.10.0.6:8080, ssl: none, headers: ':authority', 'webapp.istioinaction.io:30000'
...
, dynamicMetadata: filter_metadata {
  key: &quot;envoy.filters.http.jwt_authn&quot;
  value {
    fields {
      key: &quot;auth@istioinaction.io&quot;
      value {
        struct_value {
          fields {
            key: &quot;exp&quot;
            value {
              number_value: 4745145071
            }
          }
          fields {
            key: &quot;group&quot;
            value {
              string_value: &quot;admin&quot;
            }
          }
          
[2025-05-10T17:15:17.635Z] &quot;POST /api/catalog HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 44 357 14 13 &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;adac4479-d5c6-91a7-987c-4da6e629155a&quot; &quot;webapp.istioinaction.io:30000&quot; &quot;10.10.0.18:8080&quot; outbound|80||webapp.istioinaction.svc.cluster.local 10.10.0.6:60624 10.10.0.6:8080 192.168.65.1:55478 - -&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23800a866cc0fd8819a8d9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;관리자가 catalog 에 새 아이템을 만들 수 있도록 허용하고 있음을 확인.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238073ab17fa31ca2c1719&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1efb8b2c1c2380b580ebc19c420b1782&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;9.5. 커스텀 외부 인가 서비스와 통합하기&lt;/p&gt;
&lt;p id=&quot;block-1efb8b2c1c23804aa349ce021ecfe510&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://netpple.github.io/docs/istio-in-action/Istio-ch9-securing-5-external_authz&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://netpple.github.io/docs/istio-in-action/Istio-ch9-securing-5-external_authz&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1efb8b2c1c23807e8694dcd3abcb1692&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : 외부 인가 서비스 호출&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238059bfe6de42926eab54&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;SPIFFE를 기반으로 구축된 이스티오의 인증 메커니즘이 서비스 인가를 구축할 수 있는 기반을 제공하는 방법을 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380868ad8fbd49339b6b8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 엔보이의 기본 RBAC 기능을 사용해 인가를 구현한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238043a34ef08af08ac5f9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그런데 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가에 좀 더 정교한 커스텀 메커니즘&lt;/span&gt;이 필요하면 어떻게 해야 할까?&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23805582b3f086b9896020&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청을 허용할지 여부를 결정할 때 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;외부 인가 서비스를 호출&lt;/span&gt;하도록 이스티오의 서비스 프록시를 설정할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23800c939aff8cfef54d29&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/e4226885-8b0b-4522-818d-844431177f7d/CleanShot_2025-05-04_at_16.56.47.png?table=block&amp;amp;id=1efb8b2c-1c23-800c-939a-ff8cfef54d29&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=A4ak3pPBJOU9qWDB0B0Iqb_mDs7_8ay12KTeCieEvTc&quot; alt=&quot;외부 서버에서 요청을 인가받도록 CUSTOM 정책 사용하기&quot; width=&quot;768&quot; height=&quot;399.56078431372555&quot; /&gt;외부 서버에서 요청을 인가받도록 CUSTOM 정책 사용하기&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238081b4e0fc0bf12dd1d5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23802489dbdde6ee13894c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 9.13에서 서비스 프록시에 들어온 요청은 프록시가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;외부 인가(ExtAuthz&lt;/span&gt;) 서비스를 호출하는 동안 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;잠시 멈춘&lt;/span&gt;다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380258463e6d4bfc204c6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;외부 인가 서비스는 애플리케이션 사이드카로 메시 안에 존재하거나 메시 바깥에 존재할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238028848af3d61743c537&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;외부 인가는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이&lt;/span&gt;의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CheckRequest&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;API&lt;/span&gt;를 구현해야 한다 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/envoyproxy/go-control-plane/blob/main/envoy/service/auth/v2/external_auth.pb.go#L37&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Code&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238036b327fa5596fcf141&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 API를 구현하는 외부 인가 서비스의 예를 들면 다음과 같다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238078a43ece4c6c44cc0d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Open Policy Agent (&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.openpolicyagent.org/docs/latest/envoy-tutorial-istio&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.openpolicyagent.org/docs/latest/envoy-tutorial-istio&lt;/a&gt;)&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238037a20ae89d7acd559d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Signal Sciences (&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://www.signalsciences.com/blog/integrations-envoy-proxy-support&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;www.signalsciences.com/blog/integrations-envoy-proxy-support&lt;/a&gt;)&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f9b47de71f32e3f342&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Gloo Edge Ext Auth (&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://docs.solo.io/gloo-edge/latest/guides/security/auth/extauth&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://docs.solo.io/gloo-edge/latest/guides/security/auth/extauth&lt;/a&gt;)&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380bb9c2de36ba9d9fb46&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Istio sample Ext Authz (&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/istio/istio/tree/release-1.9/samples/extauthz&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/istio/istio/tree/release-1.9/samples/extauthz&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23804f8858cadaa785fea0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c2380a08ffbf849946c31c3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;외부 인가 서비스&lt;/span&gt;는 프록시가 인가를 집행하는 데 사용하는 &amp;lsquo;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;허용&lt;/span&gt;&amp;rsquo;이나 &amp;lsquo;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;거부&lt;/span&gt;&amp;rsquo; 메시지를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;반환&lt;/span&gt;한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The ExtAuthz service returns an &amp;ldquo;allow&amp;rdquo; or &amp;ldquo;deny&amp;rdquo; message that the proxy then uses to enforce authorizations.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23807095aef199a46ad043&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238048a9a5df5a757e91a9&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1574.66px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1efb8b2c1c2380df96bccf358c2eda73&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ExtAuthz performance tradeoffs &lt;/span&gt;외부 인가 성능 트레이드오프 요청 경로 중에 외부 인가 서비스를 호출하기 때문에 이 방법을 사용할 때는 지연 시간 증가에 대비해야 한다. 이스티오의 내장 인가 기능은 대체로 충분하고 유연하게 작동하지만, 완벽히 통제해야 한다면 외부 인가 서비스를 호출하면서 생기는 성능 트레이드오프를 평가해야 한다. 이전 단락에서 언급했듯이, 외부 인가 서비스를 애플리케이션 사이드카로 배포해 네트워크 오버헤드를 최소화할 수 있다. &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/tasks/security/authorization/authz-custom/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://istio.io/latest/docs/tasks/security/authorization/authz-custom/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380318035d5a7fc578557&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c238030a552dcb3754fca4f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.5.1 외부 인가 실습&lt;/span&gt; Hands-on with external authorization &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습~)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380ab8659c6672f7b558e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습 환경 초기화&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238043abe9e81423ad972a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 기존 인증/인가 정책 모두 삭제
kubectl delete authorizationpolicy,peerauthentication,requestauthentication --all -n istio-system

# 실습 애플리케이션 배포
kubectl apply -f services/catalog/kubernetes/catalog.yaml -n istioinaction
kubectl apply -f services/webapp/kubernetes/webapp.yaml -n istioinaction
kubectl apply -f services/webapp/istio/webapp-catalog-gw-vs.yaml -n istioinaction
kubectl apply -f ch9/sleep.yaml -n default

# 이스티오 샘플에서 샘플 외부 인가 서비스 배포
docker exec -it myk8s-control-plane bash
-----------------------------------
# 
ls -l istio-$ISTIOV/samples/extauthz/
total 24
-rw-r--r-- 1 root root 4238 Oct 11  2023 README.md
drwxr-xr-x 3 root root 4096 Oct 11  2023 cmd
drwxr-xr-x 2 root root 4096 Oct 11  2023 docker
-rw-r--r-- 1 root root 1330 Oct 11  2023 ext-authz.yaml
-rw-r--r-- 1 root root 2369 Oct 11  2023 local-ext-authz.yaml

cat istio-$ISTIOV/samples/extauthz/ext-authz.yaml
apiVersion: v1
kind: Service
metadata:
  name: ext-authz
  labels:
    app: ext-authz
spec:
  ports:
  - name: http
    port: 8000
    targetPort: 8000
  - name: grpc
    port: 9000
    targetPort: 9000
  selector:
    app: ext-authz
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ext-authz
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ext-authz
  template:
    metadata:
      labels:
        app: ext-authz
    spec:
      containers:
      - image: gcr.io/istio-testing/ext-authz:latest
        imagePullPolicy: IfNotPresent
        name: ext-authz
        ports:
        - containerPort: 8000
        - containerPort: 9000

kubectl apply -f istio-$ISTIOV/samples/extauthz/ext-authz.yaml -n istioinaction

# 빠져나오기
exit
-----------------------------------

# 설치 확인 : ext-authz
kubectl get deploy,svc ext-authz -n istioinaction
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ext-authz   0/1     1            0           6s

NAME                TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)             AGE
service/ext-authz   ClusterIP   10.200.1.55   &amp;lt;none&amp;gt;        8000/TCP,9000/TCP   6s

# 로그
kubectl logs -n istioinaction -l app=ext-authz -c ext-authz -f
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c23804a855bf54389e0992b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;배포한 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ext-authz&lt;/code&gt; 서비스는 아주 간단해서 들어온 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청&lt;/span&gt;에 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;x-ext-authz&lt;/code&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;헤더&lt;/span&gt;가 있고 그 값이 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;allow&lt;/code&gt; 인지만 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;검사&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d1ae2fec4e76f65b2f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 헤더가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청&lt;/span&gt;에 들어 있으면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청&lt;/span&gt;은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;허용&lt;/span&gt;되고, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;들어 있지 않으면&lt;/span&gt; 요청은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;거부&lt;/span&gt;된다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c23804593c0c601e1db7780&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청의 다른 속성을 평가하도록 외부 인가 서비스를 직접 작성하거나, 상술한 기존 서비스 중 하나를 사용할 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c23802bbc82dcacef0fb70d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23802cb058de6efbe7da75&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.5.2 이스티오에 외부 인가 설정하기&lt;/span&gt; Configuring Istio for &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ExtAuthz&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380759ab0cff74d486841&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 새로운 외부 인가 서비스를 인식하도록 설정해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380a89ee3f6b5fd6684ad&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 위해서는 이스티오 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;meshconfig&lt;/span&gt; 설정에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;extensionProviders&lt;/span&gt; 를 설정해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238097b306c386102accfc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 설정은 istio-system 네임스페이스의 istio configmap에 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238019a8d1ee32e2415d43&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 configmap 을 수정해 새 외부 인가 서비스에 대한 적절한 설정을 추가해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380b99bb3f5643fd5da72&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# includeHeadersInCheck (DEPRECATED)
KUBE_EDITOR=&quot;nano&quot; kubectl edit -n istio-system cm istio
--------------------------------------------------------
...
    extensionProviders:
    - name: &quot;sample-ext-authz-http&quot;
      envoyExtAuthzHttp:
        service: &quot;ext-authz.istioinaction.svc.cluster.local&quot;
        port: &quot;8000&quot;
        includeRequestHeadersInCheck: [&quot;x-ext-authz&quot;]
...
--------------------------------------------------------

# 확인
kubectl describe -n istio-system cm istio
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380b2815afea118d9ea5c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380baa231cc846dcf85ba&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;envoyExtAuthz&lt;/span&gt; 서비스의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP 구현체&lt;/span&gt;인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;새 확장&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;sample-ext-authz-http&lt;/span&gt;&lt;/i&gt; 를 인식하도록 설정했다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;We&amp;rsquo;ve configured Istio to be aware of a new extension called sample-ext-authz-http, an HTTP implementation of the envoyExtAuthz service.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380789b5bfc6e4d1172a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 서비스는 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;ext-authz.istioinaction.svc.cluster.local&lt;/span&gt;&lt;/i&gt; 에위치하는 것으로 정의했는데, 앞 절에서 봤던 쿠버네티스 서비스에 맞춘 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d9b276ce087c618434&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;외부 인가 서비스에 전달할 헤더를 구성할 수 있는데, 이 설정에서는 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;x-ext-authz&lt;/span&gt;&lt;/i&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;헤더를 전달&lt;/span&gt;한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;We can configure what headers to pass along to the ExtAuthz service: in this configuration, we pass along the x-ext-authz header.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e09a39c7e25c3f52a9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예제 외부 인가 서비스에서는 이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;헤더&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가 결과를 결정&lt;/span&gt;하는 데 사용한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;In our example ExtAuthz service, this header is used to determine an authorization result&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380c9b786f7bbd51bc8c3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 외부 인가 기능을 사용하기 위한&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 마지막 단계는 이 기능을 사용&lt;/span&gt;하도록 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AuthorizationPolicy 리소스를 설정&lt;/span&gt;하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380389165f84a5fc71418&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어떻게 동작하는지 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c238020bb10dcaf4a8639a0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380d0a460c5bdff9f040d&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.5.3. 커스텀 AuthorizationPolicy 리소스 사용하기&lt;/span&gt; Using a &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;custom&lt;/span&gt; AuthorizationPolicy resource&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380b198e6de6e8b31a4db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞 절에서는 action 이 DENY 혹은 ALLOW 인 AuthorizationPolicy 리소스를 만들었다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380849bdad10a864e07cc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 절에서는 action 이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CUSTOM&lt;/span&gt; 인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AuthorizationPolicy&lt;/span&gt; 를 만들고 정확히 어떤 외부 인가 서비스를 사용할지 지정해본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380b3a664c3ba7d0060ec&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 아래 AuthorizationPolicy 는 istioinaction 네임스페이스에 webapp 워크로드에 적용되며, 
# sample-ext-authz-http 이라는 외부 인가 서비스에 위임한다.
cat &amp;lt;&amp;lt; EOF | kubectl apply -f -
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: ext-authz
  namespace: istioinaction
spec:
  selector:
    matchLabels:
      app: webapp
  action: CUSTOM    # custom action 사용 -&amp;gt; 우선순위 가장 높음
  provider:
    name: sample-ext-authz-http  # istio-system ns의 istio cm의 meshconfig 이름과 동일해야 한다
  rules:
  - to:
    - operation:
        paths: [&quot;/*&quot;]  # 인가 정책을 적용할 경로
EOF

#
kubectl get AuthorizationPolicy -A
NAMESPACE       NAME        AGE
istioinaction   ext-authz   5s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c2380e9923bc5ee6bf85d3d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380cba608d91224bbfccb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;호출 확인&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1efb8b2c1c2380b1b5fbc85da31832ac&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
docker exec -it myk8s-control-plane istioctl proxy-config log deploy/webapp -n istioinaction --level rbac:debug
kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f
kubectl logs -n istioinaction -l app=ext-authz -c ext-authz -f


# 헤더 없이 호출 -&amp;gt; 호출 실패
kubectl -n default exec -it deploy/sleep -- curl webapp.istioinaction/api/catalog
denied by ext_authz for not found header `x-ext-authz: allow` in the request

kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f
2025-05-10T17:38:08.526119Z     debug   envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:114        checking request: requestedServerName: , sourceIP: 10.10.0.16:33928, directRemoteIP: 10.10.0.16:33928, remoteIP: 10.10.0.16:33928,localAddress: 10.10.0.18:8080, ssl: none, headers: ':authority', 'webapp.istioinaction'
':path', '/api/catalog'
':method', 'GET'
':scheme', 'http'
'user-agent', 'curl/8.5.0'
'accept', '*/*'
'x-forwarded-proto', 'http'
'x-request-id', '02c01fc9-9730-97c7-b0a0-6b33b279a35a'
, dynamicMetadata:      thread=31
2025-05-10T17:38:08.526167Z     debug   envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:130        shadow denied, matched policy istio-ext-authz-ns[istioinaction]-policy[ext-authz]-rule[0]  thread=31
2025-05-10T17:38:08.526177Z     debug   envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:167        no engine, allowed by default   thread=31
[2025-05-10T17:38:08.525Z] &quot;GET /api/catalog HTTP/1.1&quot; 403 UAEX ext_authz_denied - &quot;-&quot; 0 76 10 9 &quot;-&quot; &quot;curl/8.5.0&quot; &quot;02c01fc9-9730-97c7-b0a0-6b33b279a35a&quot; &quot;webapp.istioinaction&quot; &quot;-&quot; inbound|8080|| - 10.10.0.18:8080 10.10.0.16:33928 - -

kubectl logs -n istioinaction -l app=ext-authz -c ext-authz -f
2025/05/10 17:38:08 [HTTP][denied]: GET webapp.istioinaction/api/catalog, headers: map[Content-Length:[0] X-B3-Parentspanid:[3b627d52ed57a502] X-B3-Sampled:[1] X-B3-Spanid:[5e45bc51d71d84f1] X-B3-Traceid:[8377da371db013c24025cc4e745569fd] X-Envoy-Expected-Rq-Timeout-Ms:[600000] X-Envoy-Internal:[true] X-Forwarded-Client-Cert:[By=spiffe://cluster.local/ns/istioinaction/sa/default;Hash=b1a1d5a2aba395b565076483d7cd7e0357312ac3ce3900fb22d855182b821a8f;Subject=&quot;&quot;;URI=spiffe://cluster.local/ns/istioinaction/sa/webapp] X-Forwarded-For:[10.10.0.18] X-Forwarded-Proto:[https] X-Request-Id:[dafc0ab1-1d39-9fae-9854-1919f8341484]], body: []

# 헤더 적용 호출 -&amp;gt; 호출 성공!
kubectl -n default exec -it deploy/sleep -- curl -H &quot;x-ext-authz: allow&quot; webapp.istioinaction/api/catalog
[{&quot;id&quot;:1,&quot;color&quot;:&quot;amber&quot;,&quot;department&quot;:&quot;Eyewear&quot;,&quot;name&quot;:&quot;Elinor Glasses&quot;,&quot;price&quot;:&quot;282.00&quot;},{&quot;id&quot;:2,&quot;color&quot;:&quot;cyan&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Atlas Shirt&quot;,&quot;price&quot;:&quot;127.00&quot;},{&quot;id&quot;:3,&quot;color&quot;:&quot;teal&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Small Metal Shoes&quot;,&quot;price&quot;:&quot;232.00&quot;},{&quot;id&quot;:4,&quot;color&quot;:&quot;red&quot;,&quot;department&quot;:&quot;Watches&quot;,&quot;name&quot;:&quot;Red Dragon Watch&quot;,&quot;price&quot;:&quot;232.00&quot;}]

kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f
2025-05-10T17:39:37.873826Z     debug   envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:114        checking request: requestedServerName: , sourceIP: 10.10.0.16:43402, directRemoteIP: 10.10.0.16:43402, remoteIP: 10.10.0.16:43402,localAddress: 10.10.0.18:8080, ssl: none, headers: ':authority', 'webapp.istioinaction'
':path', '/api/catalog'
':method', 'GET'
':scheme', 'http'
'user-agent', 'curl/8.5.0'
'accept', '*/*'
'x-ext-authz', 'allow'
'x-forwarded-proto', 'http'
'x-request-id', 'adb34fec-6c81-96e1-aee1-edfa54eeb92e'
, dynamicMetadata:      thread=30
2025-05-10T17:39:37.873867Z     debug   envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:130        shadow denied, matched policy istio-ext-authz-ns[istioinaction]-policy[ext-authz]-rule[0]  thread=30
2025-05-10T17:39:37.873912Z     debug   envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:167        no engine, allowed by default   thread=30
[2025-05-10T17:39:37.883Z] &quot;GET /items HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 502 5 5 &quot;-&quot; &quot;beegoServer&quot; &quot;adb34fec-6c81-96e1-aee1-edfa54eeb92e&quot; &quot;catalog.istioinaction:80&quot; &quot;10.10.0.17:3000&quot; outbound|80||catalog.istioinaction.svc.cluster.local 10.10.0.18:49608 10.200.1.51:80 10.10.0.18:43802 - default
[2025-05-10T17:39:37.873Z] &quot;GET /api/catalog HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 357 16 8 &quot;-&quot; &quot;curl/8.5.0&quot; &quot;adb34fec-6c81-96e1-aee1-edfa54eeb92e&quot; &quot;webapp.istioinaction&quot; &quot;10.10.0.18:8080&quot; inbound|8080|| 127.0.0.6:49583 10.10.0.18:8080 10.10.0.16:43402 - default

kubectl logs -n istioinaction -l app=ext-authz -c ext-authz -f
2025/05/10 17:39:37 [HTTP][allowed]: GET webapp.istioinaction/api/catalog, headers: map[Content-Length:[0] X-B3-Parentspanid:[79bc7deefa2c66ca] X-B3-Sampled:[1] X-B3-Spanid:[1979fa7b87e7c2b5] X-B3-Traceid:[8ae03168d35e59c4dc28008b6fa04179] X-Envoy-Expected-Rq-Timeout-Ms:[600000] X-Envoy-Internal:[true] X-Ext-Authz:[allow] X-Forwarded-Client-Cert:[By=spiffe://cluster.local/ns/istioinaction/sa/default;Hash=b1a1d5a2aba395b565076483d7cd7e0357312ac3ce3900fb22d855182b821a8f;Subject=&quot;&quot;;URI=spiffe://cluster.local/ns/istioinaction/sa/webapp] X-Forwarded-For:[10.10.0.18] X-Forwarded-Proto:[https] X-Request-Id:[7a161f7b-db40-961e-bce3-479183b485bb]], body: []
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23801bb7a9f7f97c25b05b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/9ab20856-142f-42af-9ef6-dd987baa6805/image.png?table=block&amp;amp;id=1efb8b2c-1c23-801b-b7a9-f7f97c25b05b&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746921600000&amp;amp;signature=jK3G_5ZayAtMyvxsfM0K8zokcicb-kcGU9fci5UhpA4&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;498.3501006036217&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c238078b9b9f3c73f1095a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;jaeger UI에서 볼 수 있듯이 중간에 authorization을 위해서 ext-authz 서비스에 요청을 한 것을 볼 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c238035b5aee5992a6797d8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&quot;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;x-ext-authz: allow&lt;/span&gt;&lt;/span&gt;&quot; header가 있을 경우만 webapp workload의 &amp;ldquo;/*&amp;rdquo; 에 대해서 접근을 ALLOW 한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1efb8b2c1c23802ab5d4c326f388b504&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;9.5.4. Summary&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380259229d09c4e56cb06&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PeerAuthentication&lt;/span&gt; 은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;피어&lt;/span&gt; 간 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증&lt;/span&gt;을 정의하는 데 사용하며, 엄격한 인증 요구 사항을 적용하면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트래픽&lt;/span&gt;이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;암호화&lt;/span&gt;돼 도청할 수 없다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1efb8b2c1c2380e3b246eeb675cfc291&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PERMISSIVE&lt;/span&gt; 정책은 이스티오 워크로드가 암호화된 트래픽과 평문 트래픽을 모두 수용할 수 있게 해서 다운타임 없이 천천히 마이그레이션할 수 있도록 해준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1efb8b2c1c238002a485f55fda884f58&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AuthorizationPolicy&lt;/span&gt; 는 워크로드 ID 인증서나 최종 사용자 JWT에서 추출한 검증 가능한 메타데이터를 근거로 서비스 사이의 요청이나 최종 사용자의 요청을 인가(허용, 차단)하는 데 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380d39c0adbfe350a8e51&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RequestAuthentication&lt;/span&gt; 은 JWT가 포함된 최종 사용자 요청을 인증하는 데 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1efb8b2c1c2380f2bc1bdc29d9b9c09c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AuthorizationPolicy&lt;/span&gt; 에서 CUSTOM action을 사용하면 외부 인가 서비스를 통합할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Kubernetes</category>
      <author>ManMan</author>
      <guid isPermaLink="true">https://gylee815.tistory.com/34</guid>
      <comments>https://gylee815.tistory.com/34#entry34comment</comments>
      <pubDate>Sun, 11 May 2025 02:53:57 +0900</pubDate>
    </item>
    <item>
      <title>[IHOS 1기] 4주차 - Observability</title>
      <link>https://gylee815.tistory.com/33</link>
      <description>&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;7&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;7&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23802c8e45ed3dcc4f3558&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;관찰가능성 Observability: Understanding the behavior of your services&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1e6b8b2c1c2380e6a5b6dddcf1d4ab69&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://netpple.github.io/docs/istio-in-action/Istio-ch7-observability&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://netpple.github.io/docs/istio-in-action/Istio-ch7-observability&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e6b8b2c1c238097baffc070c0e3ef95&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;This chapter covers&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238018acf4cb3ba0929e67&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본적인 요청 수준 메트릭 수집하기 Collecting basic request-level metrics&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380918865d657e452abd1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 서비스 간 표준 메트릭 이해하기 Understanding Istio&amp;rsquo;s standard service-to-service metrics&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23806daddfd0af9f52fd1f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스로 워크로드 및 컨트롤 플레인 메트릭 긁어오기 Using Prometheus to scrape workload and control-plane metrics&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380679ea6eeb0d397dc98&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오에 프로메테우스에서 추적할 새 메트릭 추가하기 Adding new metrics in Istio to track in Prometheus&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238071ac05f53aa89935af&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : 관찰 가능성 &amp;larr; 장애 발생 시 빠르게 복구 시간 MTTR 개선 도움&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23804fa207da6f7191b105&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380c19a13c42a8a5538e1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;7.0. 실습 환경 구서&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380349d91d31bd41515d7&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;[실습 환경 구성] &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;k8s(1.23.17) 배포&lt;/span&gt; : NodePort(&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;30000&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;30005&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTPS&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380f9b7e8ff6304ae5d99&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
git clone https://github.com/AcornPublishing/istio-in-action
cd istio-in-action/book-source-code-master
pwd # 각자 자신의 pwd 경로
code .

# 아래 extramounts 생략 시, myk8s-control-plane 컨테이너 sh/bash 진입 후 직접 git clone 가능
kind create cluster --name myk8s --image kindest/node:v1.23.17 --config - &amp;lt;&amp;lt;EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000 # Sample Application (istio-ingrssgateway) HTTP
    hostPort: 30000
  - containerPort: 30001 # Prometheus
    hostPort: 30001
  - containerPort: 30002 # Grafana
    hostPort: 30002
  - containerPort: 30003 # Kiali
    hostPort: 30003
  - containerPort: 30004 # Tracing
    hostPort: 30004
  - containerPort: 30005 # Sample Application (istio-ingrssgateway) HTTPS
    hostPort: 30005
  - containerPort: 30006 # TCP Route
    hostPort: 30006
  - containerPort: 30007 # kube-ops-view
    hostPort: 30007
  kubeadmConfigPatches:
  - |
    kind: ClusterConfiguration
    controllerManager:
      extraArgs:
        bind-address: 0.0.0.0
  extraMounts: # 해당 부분 생략 가능
  - hostPath: /Users/gasida/Downloads/istio-in-action/book-source-code-master # 각자 자신의 pwd 경로로 설정
    containerPath: /istiobook
networking:
  podSubnet: 10.10.0.0/16
  serviceSubnet: 10.200.1.0/24
EOF

# 설치 확인
docker ps

# 노드에 기본 툴 설치
docker exec -it myk8s-control-plane sh -c 'apt update &amp;amp;&amp;amp; apt install tree psmisc lsof wget bridge-utils net-tools dnsutils tcpdump ngrep iputils-ping git vim -y'

# (옵션) kube-ops-view
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30007 --set env.TZ=&quot;Asia/Seoul&quot; --namespace kube-system
kubectl get deploy,pod,svc,ep -n kube-system -l app.kubernetes.io/instance=kube-ops-view

## kube-ops-view 접속 URL 확인
open &quot;http://localhost:30007/#scale=1.5&quot;
open &quot;http://localhost:30007/#scale=1.3&quot;

# (옵션) metrics-server
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm install metrics-server metrics-server/metrics-server --set 'args[0]=--kubelet-insecure-tls' -n kube-system
kubectl get all -n kube-system -l app.kubernetes.io/instance=metrics-server
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380aa8ab2c6529809027c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23803e8f2cfe8a7539c281&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;[실습 환경 구성] &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio 1.17.8 설치&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/setup/install/istioctl/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Install&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/setup/additional-setup/config-profiles/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;profile&lt;/a&gt; &lt;del style=&quot;box-sizing: border-box;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&amp;rArr; 추후에 istio profile 을 &lt;/span&gt;&lt;/i&gt;&lt;/del&gt;&lt;del style=&quot;box-sizing: border-box;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;demo&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/del&gt;&lt;del style=&quot;box-sizing: border-box;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; 로 변경해둘것.&lt;/span&gt;&lt;/i&gt;&lt;/del&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380448ad1fef68ad5968d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# myk8s-control-plane 진입 후 설치 진행
docker exec -it myk8s-control-plane bash
-----------------------------------
# (옵션) 코드 파일들 마운트 확인
tree /istiobook/ -L 1
혹은
git clone ... /istiobook

# istioctl 설치
export ISTIOV=1.17.8
echo 'export ISTIOV=1.17.8' &amp;gt;&amp;gt; /root/.bashrc

curl -s -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIOV sh -
cp istio-$ISTIOV/bin/istioctl /usr/local/bin/istioctl
istioctl version --remote=false

# default 프로파일 컨트롤 플레인 배포
istioctl install --set profile=default -y

# 빠져나오기
exit
-----------------------------------

# 설치 확인 : istiod, istio-ingressgateway, crd 등
kubectl get istiooperators -n istio-system -o yaml
kubectl get all,svc,ep,sa,cm,secret,pdb -n istio-system
kubectl get cm -n istio-system istio -o yaml
kubectl get crd | grep istio.io | sort

# 실습을 위한 네임스페이스 설정
kubectl create ns istioinaction
kubectl label namespace istioinaction istio-injection=enabled
kubectl get ns --show-labels

# istio-ingressgateway 서비스 : NodePort 변경 및 nodeport 지정 변경 , externalTrafficPolicy 설정 (ClientIP 수집)
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 8080, &quot;nodePort&quot;: 30000}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 443, &quot;targetPort&quot;: 8443, &quot;nodePort&quot;: 30005}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;:{&quot;externalTrafficPolicy&quot;: &quot;Local&quot;}}'
kubectl describe svc -n istio-system istio-ingressgateway


# 내부 접속 테스트용 netshoot 파드 생성
cat &amp;lt;&amp;lt;EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: netshoot
spec:
  containers:
  - name: netshoot
    image: nicolaka/netshoot
    command: [&quot;tail&quot;]
    args: [&quot;-f&quot;, &quot;/dev/null&quot;]
  terminationGracePeriodSeconds: 0
EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23809288a8dc504427b831&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23805b9daefee3f7b0a2e7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380dcba11d3ddaf626447&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;7.1 What is observability?&lt;/span&gt; 관찰 가능성이란 무엇인가?&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380958c31f7f5e893d665&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : 이스티오는 애플리케이션 수준 네트워크 계측을 보조&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380258f67f75bb3400563&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;관찰 가능성&lt;/span&gt;은 시스템의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;특성&lt;/span&gt; 중 하나로, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;외부 신호와 특성만 보고&lt;/span&gt;도 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;just by looking&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;시스템의 내부 상태&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;internal state&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이해하고 추론&lt;/span&gt;할 수 있는 수준을 나타낸다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238037b86ad5cd59d6be89&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;관찰 가능성은 런타임 동작을 변경할 수 있는 제어 기능을 시스템에 구현하는 데 중요하다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380b594f0fd7643bf4a29&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 개념은 루돌프 칼만 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Rudolf E. Kalman&lt;/span&gt; 이 1960년 논문 &amp;lsquo;제어 시스템의 일반 이론에 관해 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;On the General Theory of Control Systems&lt;/span&gt;&amp;rsquo; 에서 처음 발표한 제어 이론을 기반으로 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23804e8762c8df1306b360&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;좀 더 실용적인 측면에서 보면 우리는 시스템의 안정성을 중요하게 생각하는데, 언제 시스템이 잘 동작하는지 이해해야 시스템에 문제가 생겼을 때 이를 판단할 수 있고 상술한 역동성을 유지할 수 있는지 적절한 수준의 자동 및 수동 제어를 구현할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380709da0dc3e240f6b88&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d48056f1a57bfa2c81&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림 7.1은 시스템을 거쳐가는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청&lt;/span&gt;의 동작에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;영향&lt;/span&gt;을 미치는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;위치&lt;/span&gt;에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오의 데이터 플레인&lt;/span&gt;이 있음을 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238048aa88f4719df55a75&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 트래픽 전환, 복원력, 정책 강제 등 제어를 구현하는 데 도움이 될 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380f1a5e6ea8ea6857cac&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 어떤 제어를 언제 사용해야 할지 알기 위해서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;시스템에서 어떤 일이 일어나고 있는지 이해&lt;/span&gt;해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380339cd4e5b4d01785e4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 제어 기능 대부분이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션 요청의 네트워크 수준에서 구현되&lt;/span&gt;므로, 관찰 결과를 알리기 위해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭을 수집하는 이스티오의 기능&lt;/span&gt;도 이 수준에 있다는 것은 그리 놀라운 일이 아니다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d88fe8e2d9222c8a54&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇다고 해서 이스티오를 사용해 관찰 가능성을 보조하기만 하면 시스템에 관찰 가능성을 들여올 수 있다는 의미는 아니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380f5aa9ee54f2e801a33&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/5722fa62-3374-4f07-b9bd-294a36e890a6/CleanShot_2025-04-26_at_16.49.29.png?table=block&amp;amp;id=1e6b8b2c-1c23-80f5-aa9e-e54f2e801a33&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=AOSktLh1fU6SBLUlv3Fa4Zc0OQUq7Jqn7SZBscZnTDc&quot; alt=&quot;이스티오는 제어와 관찰을 구현할 수 있는 위치에 있다&quot; width=&quot;605&quot; height=&quot;343&quot; /&gt;이스티오는 제어와 관찰을 구현할 수 있는 위치에 있다&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238095925ce2214788a906&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23808db524f4511821c132&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;관찰 가능성이란 특성 기성 솔루션을 말하는 것이 아니라 다양한 수준을 포함하는 시스템의 특성을 말한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380a996f5d34bd07ace39&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 관찰 가능성&lt;/span&gt;은 애플리케이션 계측, 네트워크 계측, 시그널 수집 인프라, 데이터베이스뿐 아니라 예기치 못한 일이 일어났을 때 방대한 데이터를 잘 추리고 결합해 전체 그림을 그려내는 방법도 포함해야 한다. (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다양한 레벨 계측 필요&lt;/span&gt;)&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380959347f2764ad729e9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오&lt;/span&gt;는 관찰 가능성의 한 부분인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션 수준 네트워크 계측을 보조&lt;/span&gt;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238022a19cd46916a3e66a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23802386eddf2806dca3e4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;7.1.1 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Observability&lt;/span&gt; 관찰가능성 (휠씬 더 많은 데이터 수집) vs. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;monitoring&lt;/span&gt; 모니터링&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380e382aff2904cd68449&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;관찰 가능성이란 용어는 이미 익숙할 수 있는 관행인 모니터링과 관련해 시장에 혼란을 가져왔다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380a59b28fc0b28d2a2ad&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;모니터링이란 메트릭, 로그, 트레이스 등을 수집 및 집계하고, 신중하게 지켜봐야 하는 시스템 상태를 미리 정의한 기준과 비교하는 관행을 말한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380b18801d04556ed4ef7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메트릭 중 하나가 임계값을 넘겨 불량 상태로 향하고 있다면, 우리는 시스템을 바로잡기 위한 조치를 취한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238057844eff8342be2bf1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 운영 팀은 특정 데이트베이스 인스턴스의 디스크 사용량 정보를 집계할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238096aaebd17d6a392516&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 메트릭에서 디스크 사용량이 디스크 용량에 가까워지면 디스크에 공간을 추가하는 등 조치를 시작하도록 정보를 울릴 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380a7ade5eb799b6af2fe&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238055a224dd2964b26ee8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모니터링&lt;/span&gt;은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;관찰 가능성의 부분집합&lt;/span&gt;이다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380099e8fd32978792781&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모니터링&lt;/span&gt;은 바람직하지 않다고 알려진 상태를 감시하고 경고하고자, 특히 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭을 수집하고 집계&lt;/span&gt;하고 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238052b8fee5c6f2eb6e15&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;반면에&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 관찰 가능성&lt;/span&gt;은 시스템을 예측하기 매우 어려운 것으로 보기에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;일어날 수 있는 모든 고장을 사전에 알 수는 없다고 가정&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380afae37cfcaef1dbbd6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;우리는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;휠씬 더 많은 데이터&lt;/span&gt;, 전체 집합이 기하급수적으로 클 수 있는 사용자 ID, 요청 ID, 소스 IP등 카디널리티가 높은 데이터까지도 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;수집&lt;/span&gt;하고, 도구를 사용해 데이터를&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 빠르게 탐색하고 질문&lt;/span&gt;해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380148099eb5b4ce643bf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 사용자 ID가 400000021인 특정 사용자 홍길동이 장바구니의 물건을 계산하려 하는데, 지불 옵션을 고를 때 10초의 지연 시간을 겪었다고 해보자.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380f6a5a8e26f28fa35ca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;미리 정의해둔 메트릭 임계값(디스크 사용량, 대기열 깊이, 머신 상태 등)은 모두 허용 가능한 수준일 수 있지만, 홍길동은 이와 같은 경험에 무척 짜증이 난다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23805db2d1e75c7f29dd5c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;만약 관찰 가능성을 염두에 두고 설계했다면, 서비스의&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 여러 계층을 살펴보고 시스템에서 요청이 거쳤을 정확한 경로를 확인&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23808ca523c020efbb58ff&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23803a9075eddd2f407c10&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;7.1.2 How Istio helps with observability 이스티오가 어떻게 관찰 가능성을 돕는가?&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238045941cc417697f53f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오&lt;/span&gt;는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 관찰 가능한 시스템을 구축하는 데 도움을 줄 수 있는 독특한 위치&lt;/span&gt;에 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238017a5a8ddacde349d02&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 데이터 플레인 프록시&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 엔보이&lt;/span&gt;가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 간 네트워크 요청 경로에 자리&lt;/span&gt;하고 있기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238004a028d1bc28ab96fe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 엔보이 서비스 프록시를 통해 요청 처리와 서비스 상호작용에 관련된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;중요 메트릭을 포착&lt;/span&gt;할 수 있는데, 이를테면 초당 요청 수, 요청 처리에 걸리는 시간(백분위수로 구분), 실패한 요청 수 등이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238054ace8fdb75a375979&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 이스티오는 시스템에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;새 메트릭을 동적으로 추가&lt;/span&gt;할 수 있으므로, 미처 생각하지 못했던 새로운 정보를 포착하는 데 도움이 될 수도 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23807ea2e7f456331c8e7f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23802b8086cdf23982d960&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;분산 시스템을 이해하는 또 다른 측면은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;시스템을 거치는 요청을 추적&lt;/span&gt;해 어떤 서비스 및 구성 요소가 요청 흐름에 포함되는지, 그래프 내 각 노드가 요청을 처리하는 데 얼마나 걸리는지를 이해하는 것이다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다음 장에&lt;/span&gt;서는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 분산 트레이싱&lt;/span&gt;을 다룬다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380f995dbc0ce33c62441&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380549afae6fc89034781&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마지막으로 이스티오에는 프로메테우스, 그라파나, 키알리 등과 같은 기본 샘플 도구가 포함돼 있어 서비스 메시와 서비스 메시가 알고 있는 서비스의 상태를 시각화하고 탐색하는 데 도움이 된다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23808a8245fde7ad1fa719&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;우리는 기본 샘플 프로메테우스, 그라파나, 키알리를 사용하지 않을 것이다. (2장에서 설치했던 추가 기능으로서 데모용이다)&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238083bcd5f53b6f7fccc0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 장과 다음 장에서는 좀 더 현실적인 설정을 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238015b978c28cc6008a6b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;2장에서 설치한 샘플 도구를 삭제한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&amp;rarr; 실습 환경에서 미설치로 대체&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23801d9519f71163725261&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23803fbf81d4ba78f64b71&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380ddb0ccf83462ca3db8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;7.2 Exploring Istio metrics&lt;/span&gt; 이스티오 메트릭 살펴보기 &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23807ea8b3cd36957c2ba5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 플레인&lt;/span&gt;은 요청을 처리하고, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인&lt;/span&gt;은 데이터 플레인이 요청을 처리하도록 설정한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23807cb565d827d9c3d9ee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;둘 다 메트릭이 아주 방대하므로, 애플리케이션 네트워크와 메시의 운영 측면에서 런타임에 어떤 일이 있는지 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 플레인&lt;/span&gt;과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인&lt;/span&gt;에서 사용할 수 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭&lt;/span&gt;을 자세히 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;살펴보자.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380b5a7ffe024d132f5cb&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;7.2.1 Metrics in the data plane&lt;/span&gt; 데이터 플레인의 메트릭 - 엔보이 표준/상세 메트릭 설정 및 확인&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23804b8316edea5f7cde3d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 커넥션, 요청, 런타임 메트릭을 다양하게 갖추고 있으며, 이들을 사용해 서비스의 네트워크 및 통신 상태를 파악할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238068a5b2f083853e4b6f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;먼저 예제 애플리케이션의 부분집합을 배포하고, 그 구성 요소를 탐색해 이들 메트릭이 어디서 오는지, 메트릭에 어떻게 접근할 수 있는지를 이해해보자.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d8b1f6cfb8a9e82756&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션 네트워킹 관련 메트릭을 수집한 후 탐색하고 시각화할 수 있는 영역으로 가져와 관찰할 수 있는 시스템을 구축하는 이스티오의 기능을 살펴볼 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380408bfae7f6555b7956&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238094a43bc6dfd86e5369&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;초기화 및 실습 환경 구성&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238073ad86d2861c0c237e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;sql&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# istioinaction 네임스페이스 초기화
kubectl delete -n istioinaction deploy,svc,gw,vs,dr,envoyfilter --all

# catalog 앱 기동
kubectl apply -f services/catalog/kubernetes/catalog.yaml -n istioinaction

# webapp 앱 기동
kubectl apply -f services/webapp/kubernetes/webapp.yaml -n istioinaction

# gateway, virtualservice 설정
kubectl apply -f services/webapp/istio/webapp-catalog-gw-vs.yaml -n istioinaction

# 확인
kubectl get deploy,pod,svc,ep,gw,vs -n istioinaction

# 호출테스트
curl -s http://webapp.istioinaction.io:30000
curl -s http://webapp.istioinaction.io:30000/api/catalog | jq
curl -s http://webapp.istioinaction.io:30000/api/catalog | jq
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380c5ac81cd08397fdea4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d99f6ecf34554fb2a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스의 사이드카 프록시가 유지하는 메트릭 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23801d9fd7d1938cf91ef8&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;excel&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl get pod -n istioinaction
NAME                     READY   STATUS    RESTARTS   AGE
catalog-6cf4b97d-fcnb9   2/2     Running   0          2m54s
webapp-7685bcb84-78nws   2/2     Running   0          2m53s

docker exec -it myk8s-control-plane istioctl proxy-status
NAME                                                  CLUSTER        CDS        LDS        EDS        RDS        ECDS         ISTIOD                      VERSION
catalog-6cf4b97d-fcnb9.istioinaction                  Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-7df6ffc78d-5c7k2     1.17.8
istio-ingressgateway-996bc6bb6-fqqs4.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-7df6ffc78d-5c7k2     1.17.8
webapp-7685bcb84-78nws.istioinaction                  Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-7df6ffc78d-5c7k2     1.17.8

# 쿼리를 실행해 파드의 통계 확인 : 정보가 많음. 프록시가 보관하는 정보는 휠씬 더 많지만, 대부분은 기본적으로 제거됨.
kubectl exec -it deploy/catalog -c istio-proxy -n istioinaction -- curl localhost:15000/stats
kubectl exec -it deploy/webapp  -c istio-proxy -n istioinaction -- curl localhost:15000/stats
...
destination_version=.=unknown;.;destination_service=.
=webapp.istioinaction.svc.cluster.local;.;destination_service_name=.
=webapp;.;destination_service_namespace=.=istioinaction;.;
destination_canonical_service=.=webapp;
.;destination_canonical_revision=.
=latest;.;request_protocol=.=http;.;response_flags=.=-;.
;connection_security_policy=.=mutual_tls;.;response_code=.=200;.
;grpc_response_status=.=;.;destination_cluster=.=Kubernetes;.
;source_cluster=.=Kubernetes;.;istio_requests_total: 2
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380f28103d09847938569&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서 가장 중요한 부분은 마지막 istio_request_total 이다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23805db704df15fef650b3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;나머지 부분을 읽으면, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이것이 인그레스 게이트웨이에서 webapp 서비스로 들어오는 요청에 대한 메트릭이며 그 요청이 총 2개임&lt;/span&gt;을 알 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23803ab48fd3cc1ba109f7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 메트릭이 보이지 않으면 서비스를 몇 번 더 호출해보자.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d3b25ec6e3e0c6e13a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 히스토그램은 각 프록시가 인바운드 및 아웃바운드 호출에 유지하는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 표준 이스티오 메트릭&lt;/span&gt;이다. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/reference/config/metrics/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380c4b6ebd177ffa5112f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio_requests_total&lt;/span&gt; : This is a&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;COUNTER&lt;/code&gt;&amp;nbsp;incremented for every request handled by an Istio proxy.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380138cd8ef5604d1f6bd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio_request_bytes&lt;/span&gt; : This is a&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;DISTRIBUTION&lt;/code&gt;&amp;nbsp;which measures HTTP request body sizes&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23804ea132d31af4fcb6ae&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio_response_bytes&lt;/span&gt; : This is a&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;DISTRIBUTION&lt;/code&gt;&amp;nbsp;which measures HTTP response body sizes.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380b8a2f5c605d0f2d1b7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio_request_duration_milliseconds&lt;/span&gt; : This is a&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;DISTRIBUTION&lt;/code&gt;&amp;nbsp;which measures the duration of requests.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1e6b8b2c1c238024af9ace87e3ba186a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&amp;rarr; &amp;nbsp;A&amp;nbsp;&lt;/i&gt;&lt;i&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;COUNTER&lt;/code&gt;&lt;/i&gt;&lt;i&gt;&amp;nbsp;is a strictly increasing integer , A&amp;nbsp;&lt;/i&gt;&lt;i&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;DISTRIBUTION&lt;/code&gt;&lt;/i&gt;&lt;i&gt;&amp;nbsp;maps ranges of values to frequency. - &lt;/i&gt;&lt;i&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/envoyproxy/envoy/blob/main/source/docs/stats.md&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p id=&quot;block-1e6b8b2c1c2380288885c863598c36a0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&amp;rArr; The telemetry component is&amp;nbsp;&lt;/i&gt;&lt;i&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/istio/proxy/tree/master/extensions/stats&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;implemented&lt;/a&gt;&lt;/i&gt;&lt;i&gt;&amp;nbsp;as a&amp;nbsp;&lt;/i&gt;&lt;i&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/proxy-wasm/spec&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Proxy-wasm&lt;/a&gt;&lt;/i&gt;&lt;i&gt;&amp;nbsp;plugin.&lt;/i&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380dabde4c59bd0dcf9bd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이들 덕분에 메트릭 수집에 대해 따로 무엇을 하지 않아도 정보가 풍부하다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238007b847e85937993a86&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238034ad90fd5a2628b8b5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(참고) 최소한의 종속성만 포한하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;distroless&lt;/span&gt; 이미지 집합은 curl 미포함으로 pilot-agent 에 쿼리할 수 있는 최소한의 cli 방법 사용 가능 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/ops/configuration/security/harden-docker-images/#install-distroless-images&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380fd918bd9df8ed55268&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# Follow the Installation Steps to set up Istio. Add the variant option to use the distroless images.
istioctl install --set values.global.variant=distroless

# pilot-agent request
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- pilot-agent request GET help
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- pilot-agent request GET /stats
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- pilot-agent request GET /stats/prometheus
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- pilot-agent request GET /listeners
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- pilot-agent request GET /clusters
...

# Debugging
$ kubectl debug --image istio/base --target istio-proxy -it app-65c6749c9d-t549t
Defaulting debug container name to debugger-cdftc.
If you don't see a command prompt, try pressing enter.
root@app-65c6749c9d-t549t:/# curl example.com&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238065af16f67c89393b33&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380fb9377d992e66f9129&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프록시가 엔보이 통계를 더 많이 보고하도록 설정하기&lt;/span&gt; CONFIGURING PROXIES TO REPORT &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;MORE ENVOY STATISTICS&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380369e25cd6ced0c44a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;가끔 네트워크 동작을 트러블슈팅하려면 표준 이스티오 메트릭보다 더 많은 정보를 확인해야 할 때가 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23802bb32ffc79bf9e016d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞 장들에서 이렇게 다른 메트릭을 활성화하는 방법을 살짝 언급했는데, 이제 자세히 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380319f17c926ae9b0fd0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380e2b087e4041f4ed2dd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션 호출이 자신의 클라이언트 측 프록시를 거쳐갈 때, 프록시는 라우팅 결정을 내리고 업스트릠 클러스터로 라우팅한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380729be6e0eb75780a3c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;업스트림 클러스터란 관련 설정(로드 밸런싱, 보안, 서킷 브레이커 설정 등)을 적용해 실제 호출되는 서비스를 말한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238090a1eedaddcf35ffd3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 예제에서는 webapp 서비스가 catalog 서비스로 라우팅된다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23803e8f75c4dc20c398ce&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;업스트림 catalog 서비스 호출에 추가 정보를 활성해화보자.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380ef9d16fc8d06726b63&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;방법 1 &lt;/span&gt;(IstioOperator 명세) : 메시 전체에 적용 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/reference/config/istio.mesh.v1alpha1/#ProxyConfig&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380d7abfcee6ec0a70343&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: control-plane
spec:
  profile: demo
  meshConfig:
    defaultConfig: # Defines the default proxy configuration for all services
      proxyStatsMatcher: # Customizes the reported metrics
        inclusionPrefixes: # Metrics matching the prefix will be reported alongside the default ones.
        - &quot;cluster.outbound|80||catalog.istioinaction&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23806ba3b7de1762516719&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메시 전체에 수집하는 메트릭을 늘리면 메트릭 수집 시스템을 과부하 상태로 만들 수 있으므로 아주 신중하게 적용해야 한다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23801aa664fa59527edf91&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380198b78c5c99923f6aa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;방법 2&lt;/span&gt; (해당 워크로드 별 명세) : 워크로드 단위로 설정(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애노테이션으로 포함할 메트릭 지정&lt;/span&gt;) &lt;i&gt;&amp;larr; 권장 방법&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380f4a724f46f492c04a2&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cat ch7/webapp-deployment-stats-inclusion.yaml
...
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |-
          proxyStatsMatcher:
            inclusionPrefixes:
            - &quot;cluster.outbound|80||catalog.istioinaction&quot;
      labels:
        app: webapp&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380d38754e54fbf6738be&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;stata&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 호출테스트
curl -s http://webapp.istioinaction.io:30000/api/catalog | jq

# 적용 전 확인
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- curl localhost:15000/stats | grep catalog

# 적용
cat ch7/webapp-deployment-stats-inclusion.yaml
kubectl apply -n istioinaction -f ch7/webapp-deployment-stats-inclusion.yaml

# 호출테스트
curl -s http://webapp.istioinaction.io:30000/api/catalog | jq
curl -s http://webapp.istioinaction.io:30000/api/catalog | jq

# 적용 후 확인 : catalog.istioinaction 에 대한 metrics 추가
# upstream 클러스터로 향햐는 커넥션 혹은 요청 시 circuit breaking 작동 확인
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- curl localhost:15000/stats | grep catalog
...
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.upstream_cx_active: 2
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.upstream_cx_close_notify: 0
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.upstream_cx_connect_attempts_exceeded: 0
...
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.upstream_rq_200: 2
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.upstream_rq_2xx: 2
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.upstream_rq_active: 0
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238047a225e30f24206de2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380f6b452d1dfefe1839f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 트래픽을 식별 할 때 출처가 내부인지 외부인지를 구분한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23808ab755fa5a9c76b76e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;내부&lt;/span&gt;&lt;/span&gt;는 보통 메시 내부 트래픽이라 인식하는 것을 말하고, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;외부&lt;/span&gt;는 메시 외부에서 시작한 트래픽(인그레스 게이트웨이로 들어온 트래픽)을 말한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238089875add121eaf5fa6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cluster_name.internal.*. 메트릭을 보면 메시 내부에서 시작해 성공한 요청 개수를 확인 할 수 있다.
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- curl localhost:15000/stats | grep catalog | grep internal
...
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.internal.upstream_rq_200: 2
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.internal.upstream_rq_2xx: 2
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.internal.upstream_rq_completed: 2
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380c0bf4ee907b2375d85&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380beb7d0ff36de98c000&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;cluster_name.&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ssl&lt;/span&gt;&lt;/span&gt;.* 메트릭은 트래픽이 TLS로 업스트림 클러스터로 이동하는지 여부와 커넥션과 관련된 기타 세부 정보(cipher, curve 등)을 알아내는 데 매우 유용하다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23808299d6d0fb67d2d6f2&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;stata&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cluster_name.internal.*. 메트릭을 보면 메시 내부에서 시작해 성공한 요청 개수를 확인 할 수 있다.
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- curl localhost:15000/stats | grep catalog | grep ssl
...
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.ssl.ciphers.TLS_AES_128_GCM_SHA256: 2
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.ssl.connection_error: 0
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.ssl.curves.X25519: 2
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.ssl.fail_verify_cert_hash: 0
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.ssl.fail_verify_error: 0
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.ssl.fail_verify_no_cert: 0
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.ssl.fail_verify_san: 0
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.ssl.handshake: 2
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.ssl.versions.TLSv1.3: 2 # 사용중인 TLS 버전
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238077b69fd606c505927d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238089ac08ee5a228e06a0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;upstream_cx와 upstream_rq는 네트워크에서 일어나는 일에 대한 좀 더 정확한 정보를 제공한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380378bd6dcbf259000c5&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;stata&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 업스트림 커넥션 및 요청에 대한 메트릭
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- curl localhost:15000/stats | grep catalog | egrep 'local.upstream_cx|local.upstream_rq'
...
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.upstream_cx_active: 2 # upstream connection 수
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.upstream_cx_close_notify: 0
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.upstream_cx_connect_attempts_exceeded: 0
...
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.upstream_rq_timeout: 0 # upstream request timeout 회수
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.upstream_rq_total: 2
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.upstream_rq_tx_reset: 0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238099898bf089645aa704&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기타 업스트림 클러스터용 메트릭은 엔보이 문서를 참고 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/configuration/upstream/cluster_manager/cluster_stats#general&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23803db088e8f110baee50&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;stata&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# lb 정보
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- curl localhost:15000/stats | grep catalog | grep lb
...
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.lb_healthy_panic: 0
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.lb_local_cluster_not_ok: 0
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.lb_recalculate_zone_structures: 0
cluster.outbound|80||catalog.istioinaction.svc.cluster.local.lb_subsets_active: 0
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238032bfb6cd7bb6f1cb21&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380a1bb69efe86c1acbaf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시가 알고 있는 모든 백엔드 클러스터에 대한 정보와 그들의 엔드포인트를 나열하도록 다른 쿼리를 해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380449eabe9471d42b055&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# /cluster endpoint 별 metric 정보
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- curl localhost:15000/clusters
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- curl localhost:15000/clusters | grep catalog
...
outbound|80||catalog.istioinaction.svc.cluster.local::observability_name::outbound|80||catalog.istioinaction.svc.cluster.local
outbound|80||catalog.istioinaction.svc.cluster.local::default_priority::max_connections::4294967295
outbound|80||catalog.istioinaction.svc.cluster.local::default_priority::max_pending_requests::4294967295
outbound|80||catalog.istioinaction.svc.cluster.local::default_priority::max_requests::4294967295
outbound|80||catalog.istioinaction.svc.cluster.local::default_priority::max_retries::4294967295
outbound|80||catalog.istioinaction.svc.cluster.local::high_priority::max_connections::1024
outbound|80||catalog.istioinaction.svc.cluster.local::high_priority::max_pending_requests::1024
outbound|80||catalog.istioinaction.svc.cluster.local::high_priority::max_requests::1024
outbound|80||catalog.istioinaction.svc.cluster.local::high_priority::max_retries::3
outbound|80||catalog.istioinaction.svc.cluster.local::added_via_api::true
outbound|80||catalog.istioinaction.svc.cluster.local::eds_service_name::outbound|80||catalog.istioinaction.svc.cluster.local
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::cx_active::1
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::cx_connect_fail::0
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::cx_total::1
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::rq_active::0
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::rq_error::0
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::rq_success::2
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::rq_timeout::0
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::rq_total::2
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::hostname::
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::health_flags::healthy
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::weight::1
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::region::
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::zone::
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::sub_zone::
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::canary::false
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::priority::0
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::success_rate::-1
outbound|80||catalog.istioinaction.svc.cluster.local::10.10.0.8:3000::local_origin_success_rate::-1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23807cb8f6fc6b19e16f78&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 출력에서는 특정 업스트림 클러스터에 대한 자세한 정보를 볼 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238054b8abf073661c81d2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 클러스터에는 어떤 엔드포인트(이 경우 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.10.0.8&lt;/span&gt;)가 있는지, 해당 엔드포인트가 속한 리전, 영역, 하위 영역은 어디인지, 해당 엔드포인트에 활성 요청 또는 오류가 있는지 등의 정보가 포함된다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380f286d4cd80274e167c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;앞 선 통계 집합은 클러스터 전체 정보(/stats)&lt;/span&gt;였는데, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이 통계 집합&lt;/span&gt;에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔드포인트별로 자세한 정보(/clusters)&lt;/span&gt;를 볼 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23808685c1fe25c87d971a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23806bab9fcc39842e1bd3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시는 메트릭을 잘 수집하고 있지만, 이것을 보자고 각 서비스 인스턴스와 프록시로 가고 싶지는 않다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380c9a765f30db8221905&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 프록시는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프로메테우스&lt;/span&gt;나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터독&lt;/span&gt; 같은 메트릭 수집 시스템으로 긁어 갈 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380328922d59684bfba13&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 절에서는 프로메테우스를 설정하는 방법을 다룰 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238003896fe6824c44016c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그 에 앞서 컨트롤 플레인에서는 어떤 메트릭을 사용할 수 있는지 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23804a82ffe793d12e411d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238092b200c25454bce1a3&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;7.2.2 Metrics in the control plane&lt;/span&gt; 컨트롤 플레인의 메트릭 - citadel, pilot, xds 메트릭 확인&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(&amp;rArr; api endpoint = /metrics, port = 15014)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238026906fc81b255129d4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt; 에는 어떻게 동작하는지에 대한 정보가 풍부하다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380439e3ae61987a5280b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를테면 다양한 데이터 플레인 프록시와 설정을 동기화한 횟수, 설정 동기화에 소요된 시간이나 잘못된 설정, 인증서 발급/로테이션에 대한 정보 등이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380459434f9798076a08d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 메트릭들은 11장에서 컨트롤 플레인 성능 튜닝을 살펴 볼 때 더 자세히 다룰 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238014bf94d9c54a5757ac&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# istiod 파드에 tcp LISTEN port 정보 확인
kubectl exec -it deploy/istiod -n istio-system -- netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:9876          0.0.0.0:*               LISTEN     
tcp6       0      0 :::8080                 :::*                    LISTEN     
tcp6       0      0 :::15017                :::*                    LISTEN     
tcp6       0      0 :::15010                :::*                    LISTEN     
tcp6       0      0 :::15012                :::*                    LISTEN     
tcp6       0      0 :::15014                :::*                    LISTEN

# 다음 명령어를 실행해 컨트롤 플레인 메트릭을 보자
## CSR : Certificate Signing Request 인증서 발급 요청
## Citadel : Istio 보안 컴포넌트
kubectl exec -it -n istio-system deploy/istiod -n istio-system -- curl localhost:15014/metrics
kubectl exec -it -n istio-system deploy/istiod -n istio-system -- curl localhost:15014/metrics | grep citadel
# HELP citadel_server_csr_count The number of CSRs received by Citadel server.
# TYPE citadel_server_csr_count counter
citadel_server_csr_count 4
# HELP citadel_server_root_cert_expiry_timestamp The unix timestamp, in seconds, when Citadel root cert will expire. A negative time indicates the cert is expired.
# TYPE citadel_server_root_cert_expiry_timestamp gauge
citadel_server_root_cert_expiry_timestamp 2.060988622e+09
# HELP citadel_server_success_cert_issuance_count The number of certificates issuances that have succeeded.
# TYPE citadel_server_success_cert_issuance_count counter
citadel_server_success_cert_issuance_count 4

# 컨트롤 플레인 버전에 대한 런타임 정보 확인 : istio 버전정보
kubectl exec -it -n istio-system deploy/istiod -n istio-system -- curl localhost:15014/metrics | grep istio_build
# HELP istio_build Istio component build info
# TYPE istio_build gauge
istio_build{component=&quot;pilot&quot;,tag=&quot;1.17.8&quot;} 1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238030a99ec176225a089f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/b841eae6-e3b1-421e-8ba4-4dea5333413b/CleanShot_2025-04-26_at_21.39.55.png?table=block&amp;amp;id=1e6b8b2c-1c23-8030-a99e-c176225a089f&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=LyyHVuWW-Pl5SBz0OUnzSXkm4uZy0tFLQQ2wnFgCK0o&quot; alt=&quot;책 부록 D.2 그림 참고&quot; width=&quot;720&quot; height=&quot;432&quot; /&gt;책 부록 D.2 그림 참고&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238024a64cf77de6e9bd60&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380369ec4fa4217a58e67&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;설정을 데이터 플레인 프록시에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;밀어넣고 동기화하는 데 사용되는 시간의 분포&lt;/span&gt;를 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23809cb5c7d74295452452&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서는 설정 수렴 이벤트 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;25&lt;/span&gt;개 중 24개가 0.1초 이하의 시간이 걸렸으며(le=&amp;rsquo;0.1&amp;rsquo; 로 표시), &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;하나만 0.1초보다 더 걸렸&lt;/span&gt;다(le는 &amp;lsquo;이하&amp;rsquo;를 의미)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238043850af2d021984ca1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vim&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 15014 port사용 -&amp;gt; istiod control-plane metrcs scraping api 제공
kubectl exec -it -n istio-system deploy/istiod -n istio-system -- curl localhost:15014/metrics | grep convergence
# HELP pilot_proxy_convergence_time Delay in seconds between config change and a proxy receiving all required configuration.
# TYPE pilot_proxy_convergence_time histogram
pilot_proxy_convergence_time_bucket{le=&quot;0.1&quot;} 24 # 0.1초 내에 24개의 업데이트가 프록시에 배포됐다
pilot_proxy_convergence_time_bucket{le=&quot;0.5&quot;} 25 # 요청 하나는 좀 더 걸려서 0.1~0.5초 범위에 속했다
pilot_proxy_convergence_time_bucket{le=&quot;1&quot;} 25
pilot_proxy_convergence_time_bucket{le=&quot;3&quot;} 25
pilot_proxy_convergence_time_bucket{le=&quot;5&quot;} 25
pilot_proxy_convergence_time_bucket{le=&quot;10&quot;} 25
pilot_proxy_convergence_time_bucket{le=&quot;20&quot;} 25
pilot_proxy_convergence_time_bucket{le=&quot;30&quot;} 25
pilot_proxy_convergence_time_bucket{le=&quot;+Inf&quot;} 25
pilot_proxy_convergence_time_sum 0.020836250000000004
pilot_proxy_convergence_time_count 25&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380d9871fd916875bdc2f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238049a046d654e84e2ddf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 부분은 컨트롤 플레인에 알려진 서비스 개수, 사용자가 설정한 VirtualService 리소스 개수, 연결된 프록시 개수를 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238032a947cb95eefc12f7&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;perl&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
kubectl exec -it -n istio-system deploy/istiod -n istio-system -- curl localhost:15014/metrics | grep pilot | egrep 'service|^pilot_xds'
...
# HELP pilot_services Total services known to pilot.
# TYPE pilot_services gauge
pilot_services 6 # 컨트롤플레인에서 알고있는 서비스개수 kubectl get svc -A -oname | wc -l
# HELP pilot_virt_services Total virtual services known to pilot.
# TYPE pilot_virt_services gauge
pilot_virt_services 1 # 유저가 설정한 VirtualService 개수 kubectl get vs -A -oname | wc -l
# HELP pilot_vservice_dup_domain Virtual services with dup domains.
# TYPE pilot_vservice_dup_domain gauge
pilot_vservice_dup_domain 0
pilot_xds{version=&quot;1.17.8&quot;} 3 # 연결된 프록시 개수 docker exec -it myk8s-control-plane istioctl proxy-status
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23800bbeb6e5709056697c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380aca865d479e129b5c0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마지막 부분은 특정 xDS API의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;업데이트 횟수&lt;/span&gt;를 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238006a4a4c4cfc05af2d2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞서 3장에서는 CDS, EDS, LDS/RDS, SDS 등의 영역에 엔보이 설정을 동적으로 업데이트 하는 방법을 다뤘다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380a8a1dbdd4ab114c46e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;bash&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# xDS별 업데이트 횟수 (counter)
kubectl exec -it -n istio-system deploy/istiod -n istio-system -- curl localhost:15014/metrics | grep pilot_xds_pushes
# HELP pilot_xds_pushes Pilot build and send errors for lds, rds, cds and eds.
# TYPE pilot_xds_pushes counter
pilot_xds_pushes{type=&quot;cds&quot;} 18
pilot_xds_pushes{type=&quot;eds&quot;} 29
pilot_xds_pushes{type=&quot;lds&quot;} 18
pilot_xds_pushes{type=&quot;rds&quot;} 14
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23808cb976e1b184861c4b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23807598a5cf1160a94651&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;11장에서는 이스티오 컨트롤 플레인의 성능 튜닝을 살펴볼 때 더 많은 컨트롤 플레인 메트릭을 다룬다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380fbbe0bfe5e2d239d10&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지금까지 데이터 플레인과 컨트롤 플레인이 내부에서 일어나는 일을 얼마나 자세히 보고하는지를 설명했다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238090a4a6cc0f9c0749dc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 세부 사항을 노출하는 것은 관찰 가능한 시스템을 구축하는 데 중요하다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23805ab2d2f2e142b90b1b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그런데 서비스 메시 구성 요소가 이 정보를 노출한다고 해도 메시의 운영자나 사용자는 이 메트릭을 어떻게 활용할지를 고민해봐야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238067b575d4152dda7f2f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 메트릭들을 얻자고 데이터 플레인이나 컨트롤 플레인의 각 구성 요소에 일일이 접근하는 것은 비현실적이다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23801b97f0c110b6eb50a3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러므로 메트릭 수집과 시계열 데이터베이스 시스템을 어떻게 사용하면 이 과정을 자동화하고 데이터를 쓸 만한 방식으로 표시할 수 있을지 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380e5a825cda7ed9c0da5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380878701fc1ac98c2704&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380e3ba5cd5c8184e9c1e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;7.3 Scraping Istio metrics with Prometheus &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380579556c44bf22137e6&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : 프로메테우스, 메트릭 엔드포인트&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238012847ae4ad83d9dc5b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스는 사운드클라우드에서 시작된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭 수집 엔진&lt;/span&gt;이자 관련 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모니터링&lt;/span&gt; 및 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;얼럿&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;alert&lt;/span&gt; 도구 집합이며, 구글의 내부 모니터링 시스템 Borgmon 에 어느 정도 기반을 두고 있다 (쿠버네티스가 Borg에 기반을 둔 것과 비슷하게).&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23803b80fdee846a99b3b5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스는 다른 텔레메트릭 혹은 메트릭 수집 시스템과 조금 다른데, 에이전트가 메트릭을 &amp;lsquo;밀어넣기 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;push&lt;/span&gt;&amp;rsquo;를 기대하기보다 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭&lt;/span&gt;을 &amp;lsquo;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;당겨오기&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;pull&lt;/span&gt;&amp;rsquo; 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238077b7ebc6c84cb9cd7e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스를 사용하면, 우리의 애플리케이션 또는 이스티오 서비스 프록시가 최신 메트릭을 포함하는 엔드포인트를 제공하고 프로메테우스가 그 정보를 끌어오거나 긁어올 수 있도록 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380f49cbedcfda4741c23&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238007b22ccba18819d9f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 책에서 당겨오기나 밀어넣기 방식 중 어느 메트릭 수집 방식이 더 나은지는 논쟁하지 않지만, 둘 다 존재하면 조직이 두 가지 중 하나(또는 두 가지 모두)를 선택할 수 있다는 사실은 인정할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380a0824dc91067a98c83&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;브라이언 브라질 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Brian Brazil&lt;/span&gt;의 팟캐스트 는 pull 기반 메트릭이 push 기반 시스템과 어떻게 다르고 프로메테우스가 pull 기반 메트릭을 어떻게 접근하는지를 자세히 설명한다. &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://thenewstack.io/exploring-prometheus-use-cases-brian-brazil/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://thenewstack.io/exploring-prometheus-use-cases-brian-brazil/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23804096ecec84649864f8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23805bb2dfcdd6a63350ea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;우리는 프로메테우스 서버를 빠르게 가동해 메트릭 수집을 시작할 수 있으며, 심지어 다른 프로메테우스 서버가 이미 개별 대상(여기서는 파드)의 메트릭 엔드포인트에서 메트릭을 긁어가고 있는 경우도 마찬가지다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23804e8eb5e9146ae6a280&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사실 이것이 프로메테우스를 고가용적으로 설정하는 방법으로, 동일한 대상을 긁어가는 프로메테우스 서버를 여럿 실행 할 수 있다. (그림 7.2 참조)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380158d43c33a65d44cfa&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/d4beed98-c065-45b8-ac67-cda6b6defa2b/CleanShot_2025-04-26_at_21.28.15.png?table=block&amp;amp;id=1e6b8b2c-1c23-8015-8d43-c33a65d44cfa&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=jU50ogvWXmJNCb2esQConZ9upbMihCE0HGBhdikvMas&quot; alt=&quot;이스티오 서비스 프록시에서 메트릭을 긁어가는 프로메테우스&quot; width=&quot;672&quot; height=&quot;213.4368932038835&quot; /&gt;이스티오 서비스 프록시에서 메트릭을 긁어가는 프로메테우스&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238011be9dd2b8cd5c76ad&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380efabdccf1a31734e88&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스를 사용하는 이점 중 하나는 단순 HTTP 클라이언트나 웹 브라우저를 사용해 메트릭 엔드포인트를 살펴볼 수 있다는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380ca90bef262d0eb42e1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 서비스 프록시 메트릭을 프로메테우스 형식으로 노출하는 HTTP 엔드포인트를 curl 명령어로 긁어보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380968f64d473cc9800b8&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# webapp 파드 정보 확인
# istiod 파드에 tcp LISTEN port 정보 확인
kubectl exec -it deploy/webapp -n istioinaction -c istio-proxy -- netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:15000         0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:15004         0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15090           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15090           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15001           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15001           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15006           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15006           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15021           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15021           0.0.0.0:*               LISTEN     
tcp6       0      0 :::8080                 :::*                    LISTEN     
tcp6       0      0 :::15020                :::*                    LISTEN 



## /stats 는 istio-proxy 가 수집한 통계정보 출력(cluster 전체에 대한 통계정보). 디버깅/모니터링 용도. /reset_counters 로 초기화
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- curl localhost:15000/stats

## 앞서 살펴본 /stats 을 프로메테우스 형식으로 출력 : 서비스 프록시가 프로메테우스 메트릭을 노출하는 15090 포트로 curl 실행 확인
## /stats/prometheus 는 istio-proxy 가 수집한 통계정보를 prometheus에 제공하기 위한 exporter endpoint. /reset_counters 로 초기화 할 수 없음
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- curl localhost:15090/stats/prometheus
...
envoy_listener_manager_lds_update_duration_bucket{le=&quot;+Inf&quot;} 3
envoy_listener_manager_lds_update_duration_sum{} 5.0999999999999996447286321199499
envoy_listener_manager_lds_update_duration_count{} 3
# TYPE envoy_server_initialization_time_ms histogram
envoy_server_initialization_time_ms_bucket{le=&quot;0.5&quot;} 0
envoy_server_initialization_time_ms_bucket{le=&quot;1&quot;} 0
envoy_server_initialization_time_ms_bucket{le=&quot;5&quot;} 0
envoy_server_initialization_time_ms_bucket{le=&quot;10&quot;} 0
envoy_server_initialization_time_ms_bucket{le=&quot;25&quot;} 0
envoy_server_initialization_time_ms_bucket{le=&quot;50&quot;} 0
envoy_server_initialization_time_ms_bucket{le=&quot;100&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;250&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;500&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;1000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;2500&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;5000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;10000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;30000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;60000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;300000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;600000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;1800000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;3600000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;+Inf&quot;} 1
envoy_server_initialization_time_ms_sum{} 62.5
envoy_server_initialization_time_ms_count{} 1

## 15020은 Exposes a variety of functionalities을 위한 port임
## Aggregating and exposing the metrics, Health-checking the Envoy and DNS proxies, Endpoints for debugging the pilot agent 3가지 역할을 담당
## Envoy 프록시의 메트릭을 집계하고 노출하는 방법은 포트 15090에서 메트릭을 쿼리하고, 애플리케이션 메트릭(구성된 경우) 및 Envoy 자체 메트릭을 활용하는 과정을 포함
## 즉, 15020의 /metrics를 호출하면 15090에서 expose하는 prometheus envoy proxy의 metrics를 query해옴
kubectl exec -it deploy/webapp -c istio-proxy -n istioinaction -- curl localhost:15020/metrics
...
envoy_listener_manager_lds_update_duration_bucket{le=&quot;+Inf&quot;} 3
envoy_listener_manager_lds_update_duration_sum{} 5.0999999999999996447286321199499
envoy_listener_manager_lds_update_duration_count{} 3
# TYPE envoy_server_initialization_time_ms histogram
envoy_server_initialization_time_ms_bucket{le=&quot;0.5&quot;} 0
envoy_server_initialization_time_ms_bucket{le=&quot;1&quot;} 0
envoy_server_initialization_time_ms_bucket{le=&quot;5&quot;} 0
envoy_server_initialization_time_ms_bucket{le=&quot;10&quot;} 0
envoy_server_initialization_time_ms_bucket{le=&quot;25&quot;} 0
envoy_server_initialization_time_ms_bucket{le=&quot;50&quot;} 0
envoy_server_initialization_time_ms_bucket{le=&quot;100&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;250&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;500&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;1000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;2500&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;5000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;10000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;30000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;60000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;300000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;600000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;1800000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;3600000&quot;} 1
envoy_server_initialization_time_ms_bucket{le=&quot;+Inf&quot;} 1
envoy_server_initialization_time_ms_sum{} 62.5
envoy_server_initialization_time_ms_count{} 1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380f08afbdf201375d59f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스가 예상하는 형식으로 된 메트릭 목록이 보인다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23801bae24f2a842e2f73b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 프록시가 주입된 모든 애플리케이션은 자동으로 이런 프로메테우스 메트릭을 노출한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238087b720c72526f988f9&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/d8cdbb62-320a-4ae4-9aff-c4022748fd9e/CleanShot_2025-04-26_at_21.37.05.png?table=block&amp;amp;id=1e6b8b2c-1c23-8087-b720-c72526f988f9&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=B160UQPnnscVuhOWbF2l4h7IRehi7t1VqR8XwyByEPs&quot; alt=&quot;image&quot; width=&quot;768&quot; height=&quot;690.142678347935&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238097a3d8c62688493728&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;15090&lt;/span&gt; : Exposes Envoy proxy metrics such as xDS stats, connection stats, HTTP stats, outlier stats, health check stats, circuit-breaker stats, and so on.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23805e960df255d3675ace&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;15020 : &lt;/span&gt;Exposes a variety of functionalities, the main ones being as follows:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380a4a210ec885d9ecd9e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Aggregating&lt;/span&gt; and &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;exposing&lt;/span&gt; the &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;metrics&lt;/span&gt; of the Envoy proxy by querying metrics from port &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;15090&lt;/span&gt;, application metrics (if configured), and its own metrics.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238023ad48cc43ac2dae70&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Health-checking&lt;/span&gt; the Envoy and &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DNS proxies&lt;/span&gt;. The proxy can be configured to perform health checking of the application on this endpoint as well, but this is generally only used for non-Kubernetes workloads such as virtual machines.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238023be60c99aa507e14e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Endpoints&lt;/span&gt; for &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;debugging&lt;/span&gt; the &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;pilot agent&lt;/span&gt;&amp;mdash;useful for Istio development teams&amp;mdash;that expose information such as memory information, CPU profiling, and so on.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380879680e018789859d3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380579ef2c90f71369482&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;7.3.0. &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;소개&lt;/code&gt; : &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/prometheus&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Prometheus&lt;/a&gt; is an &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;open-source&lt;/span&gt; systems &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;monitoring&lt;/span&gt; and &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;alerting&lt;/span&gt; toolkit originally built at&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://soundcloud.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;SoundCloud&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380748fd8eb6fa9a6e1ae&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;제공 기능&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23809ba758df30a415848e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;a multi-dimensional&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://prometheus.io/docs/concepts/data_model/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;data model&lt;/a&gt;&amp;nbsp;with &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;time series data&lt;/span&gt;&lt;/span&gt;(=&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TSDB, 시계열 데이터베이스&lt;/span&gt;) identified by metric name and &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;key/value&lt;/span&gt; pairs&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380c293adc10e297e4bca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PromQL&lt;/span&gt;, a&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://prometheus.io/docs/prometheus/latest/querying/basics/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;flexible query language&lt;/a&gt;&amp;nbsp;to leverage this dimensionality&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238076a8a0ed2f455a7d6c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;no reliance on distributed storage&lt;/span&gt;; single server nodes are autonomous - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://prometheus.io/docs/prometheus/latest/storage/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23801d9788fd0da7ffbb68&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;time series collection happens via a &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;pull&lt;/span&gt;&lt;/span&gt; model over &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP - &lt;/span&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://prometheus.io/docs/introduction/faq/#why-do-you-pull-rather-than-push&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Q&amp;amp;A&lt;/a&gt; &amp;rArr; &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;질문&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Push&lt;/span&gt; 와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pull&lt;/span&gt; 수집 방식 장단점?&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23804e8c56f38e36570d0a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://prometheus.io/docs/instrumenting/pushing/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;pushing time series&lt;/a&gt;&amp;nbsp;is supported via an intermediary gateway&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380a09589fb4290205370&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;targets are discovered via &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;service discovery&lt;/span&gt; or &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;static&lt;/span&gt; configuration&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d8b895d593aea1542d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;multiple modes of &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;graphing&lt;/span&gt; and &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;dashboarding&lt;/span&gt; support&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23808dbab8da931342f60f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://prometheus.io/docs/introduction/overview/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fd9b3dae1-fda9-4ac6-b81a-5681ea6775bd%2FUntitled.png?id=1e6b8b2c-1c23-808d-bab8-da931342f60f&amp;amp;table=block&quot; alt=&quot;https://prometheus.io/docs/introduction/overview/&quot; width=&quot;1008&quot; height=&quot;605.098445595855&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23805298e8c8336843a384&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://github.com/prometheus/prometheus/blob/86a7064/documentation/internal_architecture.md&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/2886d546-00a6-4b23-a07f-d4fa326db0a7/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB4666MKKQGDD%2F20250503%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250503T143814Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEFMaCXVzLXdlc3QtMiJIMEYCIQClpbKwar%2BWhDb1lhLsc03tnh4rOHFcLii4EWYwcJu3KwIhAJmuJeAO6Uc9SPhnRHdxnZqg6RxfeQe4S2EjpL7VrIqiKogECOv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMNjM3NDIzMTgzODA1IgwycVNTC8cTzCnMymkq3AO6kVCvfjZKOFh912ztE8eHXHrJQez0XLBtM1UgORXavTaap1YB%2FDVcgfdTWLq8zmB2slgKg%2FifAETuG%2BuPQLmgP6Ik4vPxcdU9b54hsUoBD1thoxUHn%2FvlN%2FNBuzRmf%2BVg0OHjHO%2BTx%2FPtfhmOxRE%2Fbatc7tmuS3E428r%2BWDKrJ0gGrWFyP6b34B5VrM8AFd99qHorSG%2BBUhAYOGGx4KRrRsz%2BGMhzlbzSXmNlZATTqYsgT2XiVUl1T2awd%2FtfgflD78%2BiUHK%2BXEwkRPnkhWSJxDWM%2Fyrn0%2F8O8jJwakPlrMHyHaZUFyNLF8TQOBiwiQlNWf4VQsZ3CAIri3nmqszb4pLnkZnDckFa9K5wKTDCadMlRjxfgOvPdUzc4OZINDZF8Kl%2BrN0ZrDHRhASIGFd7jhaKvMSctAf8E4T6uKnDhsj53whPdk5U50OoBbag4sAQze%2F%2B4oIO%2BoZfNJVjDC9FNetcX0pTKKSq9TmxpPN%2FtgtiQxQtdjQeJk1IaH05gmEdEjFwRVhE1%2FGMlxctiuCLCqYR0w5ffoywG9S2tK0QJsHdaX0whp1MBJjpochCt%2Bv1nZ%2Br6IMJpism86uWswN%2FcEauaWguFqRAT3h1sxSTtVoMjN76fz7kVZD4XTCt3dfABjqkAdHPfbq2iAdPQt1xnP2dohrNhHe5m3M%2F7wyAFZNSSCBx3onkT20TpwekaP1rmIvTK6NHOe0WvgDniBSYOU5XosQEWJPgEIZWaGt25fPg0SV%2BZDj9Wpfjklg5h2hyZbu%2B3EIqFewy1Csm9fnVLeor0rOINAh8WNh9h727c7Xr9Mlc2QaGB0FHBpTOJm0n17zJ%2BtoDgGpWqL%2BSrfq3QTnVpqkBRkAG&amp;amp;X-Amz-Signature=1a9d2e4bb32faeb0d6bbb53a843f9471db46fe999105831ad994243c3a1bc510&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;https://github.com/prometheus/prometheus/blob/86a7064/documentation/internal_architecture.md&quot; width=&quot;960&quot; height=&quot;632.8981723237598&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380038fd0c99971376d9f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;구성 요소&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238050a13accf8d55275e6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;the main&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/prometheus/prometheus&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Prometheus server&lt;/a&gt;&lt;/span&gt;&amp;nbsp;which scrapes and stores &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;time series data&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23803380cfc609c8d8e38e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://prometheus.io/docs/instrumenting/clientlibs/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;client libraries&lt;/a&gt;&lt;/span&gt;&amp;nbsp;for instrumenting application code&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380ac901bc08aaefb15df&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;a&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/prometheus/pushgateway&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;push gateway&lt;/a&gt;&lt;/span&gt;&amp;nbsp;for supporting short-lived jobs&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380a4bd53f82a9f3f8b07&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;special-purpose&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://prometheus.io/docs/instrumenting/exporters/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;exporters&lt;/a&gt;&lt;/span&gt;&amp;nbsp;for services like HAProxy, StatsD, Graphite, etc.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380059eaaed9086316edc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;an&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/prometheus/alertmanager&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;alertmanager&lt;/a&gt;&lt;/span&gt;&amp;nbsp;to handle alerts&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238021ae79c8ddd6c0377b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;various support tools&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238020985af247e73cffd5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Metrics&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380df90d3df608c9c166d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메트릭은 일반인이 이해하기 쉬운 수치적 측정입니다. 시계열이라는 용어는 시간에 따른 변화를 기록하는 것을 말합니다. 사용자가 측정하고자 하는 것은 애플리케이션마다 다릅니다. 웹 서버의 경우 요청 시간이 될 수 있고, 데이터베이스의 경우 활성 연결 또는 활성 쿼리 수가 될 수 있습니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23804284dfe74ace7a3213&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Metrics&lt;/span&gt; are &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;numerical&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;measurements&lt;/span&gt; in layperson terms. The term &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;time series&lt;/span&gt; refers to the recording of &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;changes over time&lt;/span&gt;. What users want to measure differs from application to application. For a web server, it could be request times; for a database, it could be the number of active connections or active queries, and so on.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238090bc30f5c27115054a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e6b8b2c1c23808e93daf2377b49c278&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프로메테우스 &lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: inherit; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.0&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 출시&lt;/span&gt;&lt;/code&gt; : 2.0, 2.18 버전 대비 처리 성능(CPU/Mem) 향상 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://prometheus.io/blog/2024/11/14/prometheus-3-0/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://devocean.sk.com/blog/techBoardDetail.do?ID=167141&amp;amp;boardType=techBlog&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;DevOcean&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://news.hada.io/topic?id=18043&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;GeekNews&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.youtube.com/watch?v=D0jE4BSzX3Y&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Youtube&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e6b8b2c1c238093918ce1df0dbe7914&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23802baf6eff9063d54701&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;7.3.1 Setting up Prometheus and Grafana&lt;/span&gt; 프로메테우스와 그라파나 설정 : &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kube prometheus stack 설치&lt;/span&gt;&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/prometheus-operator/kube-prometheus&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Github&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380e8984fc1a3057ed8ea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kube-prometheus-stack 프로젝트의 목적은 &amp;lsquo;프로메테우스 오퍼레이터나 그라파나, Alertmanager, Node exporter, Kube API용 어댑터 등&amp;rsquo; 부수적인 부분들을 포함해 프로메테우스의 현실적이고 고가용성인 배포 형상을 사전에 선별하고 통합하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380da8e5ffb397bc29ae3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kube-prometheus-stack&lt;/span&gt; collects Kubernetes manifests, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Grafana&lt;/span&gt; dashboards, and &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Prometheus&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;rules&lt;/span&gt; combined with documentation and scripts to provide easy to operate end-to-end Kubernetes cluster monitoring with Prometheus using the Prometheus Operator.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238058b5b6d10d6370f21e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 장에서는 프로메테우스에 연결하는 방법을 다루고, 8장에서는 그라파나의 통합에 대해 설명한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380659279ff90febfff9d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kube-prometheus-stack 설치 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://artifacthub.io/packages/helm/prometheus-community/kube-prometheus-stack/13.13.1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Helm_13.13.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23804ba62deca2c5b01925&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;properties&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

#
cat ch7/prom-values.yaml
open ch7/prom-values.yaml

cat &amp;lt;&amp;lt; EOF &amp;gt; prom-values-2.yaml
prometheusOperator:
  tls:
    enabled: false
  admissionWebhooks:
    patch:
      enabled: false

prometheus:
  service:
    type: NodePort
    nodePort: 30001
    
grafana:
  service:
    type: NodePort
    nodePort: 30002
EOF

# helm 설치
kubectl create ns prometheus
helm install prom prometheus-community/kube-prometheus-stack --version 13.13.1 \
-n prometheus -f ch7/prom-values.yaml -f prom-values-2.yaml

# 확인
helm list -n prometheus

kubectl get-all -n prometheus # krew plugin
kubectl get sts,deploy,pod,svc,ep,cm,secret -n prometheus
kubectl get crd | grep monitoring

kubectl get prometheus,servicemonitors -n prometheus
NAME                                                                     VERSION   REPLICAS   AGE
prometheus.monitoring.coreos.com/prom-kube-prometheus-stack-prometheus   v2.24.0   1          7s

NAME                                                                                      AGE
servicemonitor.monitoring.coreos.com/prom-kube-prometheus-stack-grafana                   7s
servicemonitor.monitoring.coreos.com/prom-kube-prometheus-stack-kube-controller-manager   7s
servicemonitor.monitoring.coreos.com/prom-kube-prometheus-stack-operator                  7s
servicemonitor.monitoring.coreos.com/prom-kube-prometheus-stack-prometheus                7s

# Prometheus 접속 : Service Discovery, Target 확인
open http://127.0.0.1:30001

# 
kubectl get servicemonitors -n prometheus
NAME                                                 AGE
prom-kube-prometheus-stack-grafana                   12m
prom-kube-prometheus-stack-kube-controller-manager   12m
prom-kube-prometheus-stack-operator                  12m
prom-kube-prometheus-stack-prometheus                12m


# (참고) 프로메테우스 버전 확인
kubectl exec -it sts/prometheus-prom-kube-prometheus-stack-prometheus -n prometheus -c prometheus -- prometheus --version
prometheus, version 2.24.0 (branch: HEAD, revision: 02e92236a8bad3503ff5eec3e04ac205a3b8e4fe)
...

# Grafana 접속 : admin / prom-operator
open http://127.0.0.1:30002
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380b8a24cd5cbbc4b8642&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(참고) kube-controller-manager 메트릭 수집 설정&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c23800e9aafc15b5735b805&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# https://stackoverflow.com/questions/65901186/kube-prometheus-stack-issue-scraping-metrics
docker exec -it myk8s-control-plane curl -s https://172.18.0.2:10257/metrics -k
kubectl edit svc -n kube-system prom-kube-prometheus-stack-kube-controller-manager # 10252 -&amp;gt; 10257로 포트 변경
...
  ports:
  - name: http-metrics
    port: 10257
    protocol: TCP
    targetPort: 10257
...
kubectl edit servicemonitors -n prometheus prom-kube-prometheus-stack-kube-controller-manager
...
spec:
  endpoints:
  - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
    port: http-metrics
    scheme: https
    tlsConfig:
      caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      insecureSkipVerify: true
  jobLabel: jobLabel
  namespaceSelector:
    matchNames:
    - kube-system
  selector:
    matchLabels:
      app: kube-prometheus-stack-kube-controller-manager
      release: prom&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238000863ed12e9f4f2a86&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23803ca85af885d69a1f01&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;새로 배포된 프로메테우스는 이스티오 워크로드를 어떻게 긁어가야 할지 모른다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23800d8152ca9a0c23ef74&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 데이터 플레인과 컨트롤 플레인 메트릭을 긁어가도록 프로메테우스를 설정하는 방법을 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238056a47cdbaf0d3ce21b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238051b533e23ff66bbb21&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;7.3.2 Configuring the Prometheus Operator to scrape the Istio control plane and workloads&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e6b8b2c1c2380218804dea1e2cd3858&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;이스티오 컨트롤 플레인과 워크로드를 긁어가도록 프로메테우스 오퍼레이터 설정하기&lt;/u&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380dab814e341270561c7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23801994e0c5c6be0e1d66&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스가 이스티오에서 메트릭을 수집하도록 설정하기 위해&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 프로메테우스 오퍼레이터&lt;/span&gt;의 커스텀 리소스 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ServiceMonitor&lt;/code&gt; 와 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;PodMonitor&lt;/code&gt; 를 사용할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380bd9deff828a0908ee9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 커스텀 리소스들은 프로메테우스 오퍼레이터 리포지터리의 설계 문서에서 자세히 설명하고 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238086b224f65b4af31d86&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Design &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/getting-started/design.md&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/getting-started/design.md&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238042a18fcbb16c884132&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ScrapeConfig CRD &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/proposals/202212-scrape-config.md&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/proposals/202212-scrape-config.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380b78d87db6bfc70c72b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/img/service-and-podMonitor.svg&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/606f9937-18c4-4797-98ec-f7ce3357cfaf/service-and-podMonitor.svg?table=block&amp;amp;id=1e6b8b2c-1c23-80b7-8d87-db6bfc70c72b&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=PvKoAQrL4VC2Vz2LAvjEstZH7NeWnHwuM8bP83MrkNA&quot; alt=&quot;https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/img/service-and-podMonitor.svg&quot; width=&quot;912&quot; height=&quot;513.495652173913&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380809ea5ce6527f74a6d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/img/custom-metrics-elements.png&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/3d9f5cf9-d222-4c8f-8936-8a1e09c4945d/image.png?table=block&amp;amp;id=1e6b8b2c-1c23-8080-9ea5-ce6527f74a6d&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=sPt8NFYWS74YiOYJA0-9N4ZRCZIzA3bevcHDQD14sZ0&quot; alt=&quot;https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/img/custom-metrics-elements.png&quot; width=&quot;1056&quot; height=&quot;572.2506102522376&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380be9a76d109e1219198&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/img/architecture.png&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/0bb8f407-5059-4155-9137-0aa5344d1f0d/image.png?table=block&amp;amp;id=1e6b8b2c-1c23-80be-9a76-d109e1219198&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=r7cN5_6TbA6xq9zMRPLXOo4W-QNKgJv5CcfraGxCvHE&quot; alt=&quot;https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/img/architecture.png&quot; width=&quot;912&quot; height=&quot;531.1536748329621&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380c7ad0fdbd3af31359c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23808c8d7bcb2b6391b681&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 컨트롤 플레인 구성 요소를 긁어오도록 ServiceMonitor 리소스를 설정하는 방법은 다음과 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23809cad7fda028128dbfe&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cat ch7/service-monitor-cp.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: istio-component-monitor
  namespace: prometheus
  labels:
    monitoring: istio-components
    release: prom
spec:
  jobLabel: istio
  targetLabels: [app]
  selector:
    matchExpressions:
    - {key: istio, operator: In, values: [pilot]} # istiod component중 pilot container
  namespaceSelector:
    any: true
  endpoints:
  - port: http-monitoring # 15014 port로 부터 istiod(=control plane) metrics를 pull(scrape)해옴
    interval: 15s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380ed9493e20485176750&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23802b9ecbd8ca33a393dd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 ServiceMonitor를 적용해 컨트롤 플레인 수집을 시작해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380d7aedff14324379a45&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/b841eae6-e3b1-421e-8ba4-4dea5333413b/CleanShot_2025-04-26_at_21.39.55.png?table=block&amp;amp;id=1e6b8b2c-1c23-8030-a99e-c176225a089f&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=LyyHVuWW-Pl5SBz0OUnzSXkm4uZy0tFLQQ2wnFgCK0o&quot; alt=&quot;책 부록 D.2 그림 참고&quot; width=&quot;720&quot; height=&quot;432&quot; /&gt;책 부록 D.2 그림 참고&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23801bb683d32f3e351ea3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;sql&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#  istiod의 Service Spec ServiceMonitor 에서 selector 에 istio=pilot 매칭 확인
kubectl describe svc istiod -n istio-system
Name:                     istiod
Labels:                   app=istiod
                          ...
                          istio=pilot
...
Port:                     http-monitoring  15014/TCP
TargetPort:               15014/TCP
Endpoints:                10.10.0.7:15014
...

#
kubectl get pod -n istio-system -l istio=pilot              
NAME                      READY   STATUS    RESTARTS   AGE
istiod-7df6ffc78d-5c7k2   1/1     Running   0          4h57m

# ServiceMonitor 적용
kubectl apply -f ch7/service-monitor-cp.yaml -n prometheus

# 확인
kubectl get servicemonitor -n prometheus
NAME                                                 AGE
istio-component-monitor                              4s
prom-kube-prometheus-stack-grafana                   172m
prom-kube-prometheus-stack-kube-controller-manager   172m
prom-kube-prometheus-stack-operator                  172m
prom-kube-prometheus-stack-prometheus                172m

# 
kubectl get svc,ep istiod -n istio-system
kubectl exec -it netshoot -- curl -s istiod.istio-system:15014/metrics
kubectl exec -it netshoot -- curl -s istiod.istio-system:15014/metrics | grep pilot_xds
kubectl exec -it netshoot -- curl -s istiod.istio-system:15014/metrics | grep citadel
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238094b163fe563bb44788&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스 웹 확인 : Service Discovery, Targets&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380348e77ccb3f647ce35&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/07d2a7a6-694f-403d-8a96-dc47e384666f/image.png?table=block&amp;amp;id=1e6b8b2c-1c23-8034-8e77-ccb3f647ce35&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=9cVJz5ugE5925TNXlkzjrAtpUCOf2Zkqns2j-CmBQ2k&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;185.97035991531405&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238030bd1cdf0e2a799098&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/bcb5144f-bb16-405c-b435-f05eb53713e0/CleanShot_2025-04-27_at_20.49.09.png?table=block&amp;amp;id=1e6b8b2c-1c23-8030-bd1c-df0e2a799098&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=nbIrKMxcIy3jnioVvXvG1GAch_6zhL5hObB4MMvV860&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;254.832298136646&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380b0bc3ac967951fc078&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23808e9250f8f5fac938b8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 플레인 수집 활성화&lt;/span&gt; : &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;PodMonitor&lt;/code&gt; 리소스를 사용해 istio-proxy 컨테이너를 포함하는 모든 파드에서 메트릭을 수집하자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380a5b450f5a8b3f3c294&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/d8cdbb62-320a-4ae4-9aff-c4022748fd9e/CleanShot_2025-04-26_at_21.37.05.png?table=block&amp;amp;id=1e6b8b2c-1c23-8087-b720-c72526f988f9&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=B160UQPnnscVuhOWbF2l4h7IRehi7t1VqR8XwyByEPs&quot; alt=&quot;image&quot; width=&quot;768&quot; height=&quot;690.142678347935&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23802295dcc7a554267e4f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# prometheus PodMonitor에서 사용할 port와 path를 지정하고, scrape: true로 pull해 갈 수 있도록 설정
kubectl describe pod -n istioinaction
...
Annotations:      ...
                  prometheus.io/path: /stats/prometheus
                  prometheus.io/port: 15020
                  prometheus.io/scrape: true
                  
# 
cat ch7/pod-monitor-dp.yaml
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: envoy-stats-monitor
  namespace: prometheus
  labels:
    monitoring: istio-proxies
    release: prom
spec:
  selector:
    matchExpressions:
    - {key: istio-prometheus-ignore, operator: DoesNotExist}
  namespaceSelector:
    any: true
  jobLabel: envoy-stats
  podMetricsEndpoints:
  - path: /stats/prometheus     # 위에서 pod에 PodMonitor를 위한 annotation에 추가됨
    interval: 15s
    relabelings:
    - action: keep
      sourceLabels: [__meta_kubernetes_pod_container_name]
      regex: &quot;istio-proxy&quot;
    - action: keep
      sourceLabels: [__meta_kubernetes_pod_annotationpresent_prometheus_io_scrape]
    - sourceLabels: [
    __address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
      action: replace
      regex: ([^:]+)(?::\d+)?;(\d+)
      replacement: $1:$2
      targetLabel: __address__
    - action: labeldrop
      regex: &quot;__meta_kubernetes_pod_label_(.+)&quot;
    - sourceLabels: [__meta_kubernetes_namespace]
      action: replace
      targetLabel: namespace
    - sourceLabels: [__meta_kubernetes_pod_name]
      action: replace
      targetLabel: pod_name

# PodMonitor 설정 적용
kubectl apply -f ch7/pod-monitor-dp.yaml -n prometheus

#
kubectl get podmonitor -n prometheus
NAME                  AGE
envoy-stats-monitor   24s

# metric 확인을 위해서 호출테스트
for in in {1..10}; do curl -s http://webapp.istioinaction.io:30000/ ; sleep 0.5; done
for in in {1..10}; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; sleep 0.5; done

# 반복 접속
while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done


# 
WEBAPP=$(kubectl get pod -n istioinaction -l app=webapp -o jsonpath='{.items[0].status.podIP}')
kubectl exec -it netshoot -- curl -s $WEBAPP:15020/stats/prometheus
...
kubectl exec -it netshoot -- curl -s $WEBAPP:15090/stats/prometheus
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238095b2b5e56795400340&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스 웹 확인 : Service Discovery, Targets &amp;rArr; &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;istio_request&lt;/code&gt; 쿼리문 입력 확인&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23809ebb35ea680938ed8a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;3개의 pod에 위에서 설정한 annotation이 설정되어있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380a79aaee4df5f6cf61c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl get po -o wide -n istioinaction 
NAME                      READY   STATUS    RESTARTS   AGE     IP           NODE                  NOMINATED NODE   READINESS GATES
catalog-6cf4b97d-fcnb9    2/2     Running   0          4h59m   10.10.0.8    myk8s-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;
webapp-8578f44594-vhklb   2/2     Running   0          4h45m   10.10.0.10   myk8s-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;

kubectl get po -o wide -n istio-system 
NAME                                   READY   STATUS    RESTARTS   AGE     IP          NODE                  NOMINATED NODE   READINESS GATES
istio-ingressgateway-996bc6bb6-fqqs4   1/1     Running   0          5h11m   10.10.0.6   myk8s-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;
istiod-7df6ffc78d-5c7k2                1/1     Running   0          5h11m   10.10.0.5   myk8s-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;

kubectl describe po -n istio-system istio-ingressgateway-996bc6bb6-fqqs4
Name:             istio-ingressgateway-996bc6bb6-fqqs4
Namespace:        istio-system
...
Annotations:      prometheus.io/path: /stats/prometheus
                  prometheus.io/port: 15020
                  prometheus.io/scrape: true
                  sidecar.istio.io/inject: false&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380b2a739f13c51a50e84&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/8551010c-f326-4777-8e44-5215b21f05c5/image.png?table=block&amp;amp;id=1e6b8b2c-1c23-80b2-a739-f13c51a50e84&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=8DW0X6FtCcR00KLffvRQL9YZdhsEqd2NXKWs1qyHOLE&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;348.79120879120876&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380779e54c36b0b1b2dcb&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/7dbe43f4-7911-4a51-8431-7b58009647c2/CleanShot_2025-04-27_at_00.25.01.png?table=block&amp;amp;id=1e6b8b2c-1c23-8077-9e54-c36b0b1b2dcb&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=bJEqfC2X-bhIYQwrFxn0_qUmtri27sEexYtZvQBGpXY&quot; alt=&quot;image&quot; width=&quot;432&quot; height=&quot;373.30434782608694&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238002aadcedb92e5fe30d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238079ae02e176308f18f5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23801e8d1de1d1b2fc5564&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;7.4 Customizing Istio&amp;rsquo;s standard metrics&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380f9bdbaf2039ec23b97&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : 엔보이 표준 메트릭 - 메트릭, 디멘션, 속성&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23807c814cd8e676ceb5bc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 장 초반부에서는 서비스 간 통신에서 기본적으로 활성화되는 이스티오의 표준 메트릭 몇 가지를 소개했다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380c29bccc2b9ef1d79cb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;표 7.1에는 표준 메트릭이 나열돼 있다 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/reference/config/metrics/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div class=&quot;notion-table__wrapper&quot; style=&quot;box-sizing: border-box; overflow-x: auto;&quot;&gt;
&lt;table class=&quot;notion-table col-header&quot; style=&quot;margin: 8px 0px 18px; border-collapse: collapse;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;
&lt;tr style=&quot;box-sizing: border-box; background-color: #e6e6e5;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 269.289px; max-width: 269.289px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;메트릭&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 389px; max-width: 389px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;설명&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 269.289px; max-width: 269.289px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;istio_requests_total&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 389px; max-width: 389px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;COUNTER, 요청이 들어올 때마다 증가&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 269.289px; max-width: 269.289px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;istio_request_duration_milliseconds&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 389px; max-width: 389px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;DISTRIBUTION, 요청 지속 시간이 분포&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 269.289px; max-width: 269.289px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;istio_request_bytes&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 389px; max-width: 389px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;DISTRIBUTION, 요청 바디 크기의 분포&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 269.289px; max-width: 269.289px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;istio_response_bytes&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 389px; max-width: 389px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;DISTRIBUTION, 응답 바디 크기의 분포&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 269.289px; max-width: 269.289px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;istio_request_messages_total&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 389px; max-width: 389px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;(gRPC) COUNTER, 클라이언트에게서 메시지가 올 때마다 증가&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 269.289px; max-width: 269.289px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;istio_response_messages_total&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 389px; max-width: 389px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;(gRPC) COUNTER, 서버가 메시지를 보낼 때마다 증가&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380a78a0fc02a38e1144d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이&lt;/span&gt; 프록시 사이드카에 몇 가지&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 플러그인&lt;/span&gt;을 사용해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭이 표시, 커스터마이징, 생성&lt;/span&gt;되는 방법을 제어한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238058add6d2bcf6a64d96&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23805e972dd8a1dc08bd9a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 절에서는 이 플러그인을 자세히 살펴본다. 하지만 그에 앞서 세 가지 주요 개념을 이해해야 한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380b48940d80a7410ac96&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭&lt;/span&gt; metric : counter, gauge, or histogram/distribution of telemetry between service calls (inbound/outbound).&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23806f9a24e8825809dbf2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;디멘션&lt;/span&gt; dimenstion&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380e59f7cd381054fcebf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;속성&lt;/span&gt; attribute&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238076be4ecbf20b48a6ab&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238095a0c6f523540dd437&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메트릭이란 서비스 호출(인바운드/아웃바운드) 간 텔레메트리의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;카운터&lt;/span&gt;나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;게이지&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;히스토그램&lt;/span&gt;/&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;분포&lt;/span&gt;를 말한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23809f9bc4d50a984c603a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 istio_requests_total 메트릭은 서비스로 향하는(인바운드) 혹은 서비스에서 나오는(아웃바운드) 요청의 총 개수를 센다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d0bf13d37f6c8895f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스에 인바운드와 아웃바운드 요청이 모두 있다면 istio_request_total 메트릭에는 항목이 2개 표시된다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238034a0b4cc46c25f0769&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인바운드&lt;/span&gt;나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;아웃바운드&lt;/span&gt;는 메트릭 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;디멘션&lt;/span&gt;의 예시다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238038b207ec1222324acf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티도의 프록시에 통계를 쿼리할 때, 메트릭과 디멘션 조합마다 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;통계가 따로 표시&lt;/span&gt;된다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23805f8d00d2900e886ea5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 예제를 보면 명확해질 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238016bae1f8321b062150&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380b98ffbc7ab159beaec&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 방향만이 유일한 디멘션은 아니다. 메트릭에는 디멘션이 여럿일 수 있으며 istio_requests_total에는 다음과 같은 기본 디멘션들이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238085a26fe26d4934b626&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;makefile&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# TYPE istio_requests_total counter
# 아래의 istio_requests_total은 해석하자면, istio-ingressgateway에서 webapp pod로의 호출에 대한 것이며 dimension은 아래와 같다.
# 이렇게 같은 dimension에 대한 요청 counter 수는 해당 metric에 쌓인다.
istio_requests_total{
response_code=&quot;200&quot;, # 요청 세부 정보 Request details
reporter=&quot;destination&quot;, # 메트릭이 누구 관점인가? Point of view of metric. 즉, webapp 관점에서의 dimension 조합의 metrics
source_workload=&quot;istio-ingressgateway&quot;,
source_workload_namespace=&quot;istio-system&quot;,
source_app=&quot;istio-ingressgateway&quot;, # 호출 주제 Caller
source_version=&quot;unknown&quot;,
source_cluster=&quot;Kubernetes&quot;,
destination_workload=&quot;webapp&quot;, 
destination_workload_namespace=&quot;istioinaction&quot;,
destination_app=&quot;webapp&quot;, # 호출 대상 Target of call
destination_version=&quot;unknown&quot;,
destination_service=&quot;webapp.istioinaction.svc.cluster.local&quot;,
destination_service_name=&quot;webapp&quot;,
destination_service_namespace=&quot;istioinaction&quot;,
destination_cluster=&quot;Kubernetes&quot;,
request_protocol=&quot;http&quot;,
response_flags=&quot;-&quot;,
grpc_response_status=&quot;&quot;,
connection_security_policy=&quot;mutual_tls&quot;,
source_canonical_service=&quot;istio-ingressgateway&quot;,
destination_canonical_service=&quot;webapp&quot;,
source_canonical_revision=&quot;latest&quot;,
destination_canonical_revision=&quot;latest&quot;
} 6 # 호출 개수 Number of calls&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238057ab54c7fd2ec86fbf&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380b78d0acb25ce50edf1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 디멘션 중 하나라도 다르면 이 메트릭의 새로운 항목으로 보인다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380f692a5cd741e066cdb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 응답 코드가 HTTP 500인 경우가 있다면 다른 줄에서 표시된다 (간결함을 위해 일부 디멘션은 생략).&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380fa854bc6d829707c37&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;makefile&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;istio_requests_total{
response_code=&quot;200&quot;, # HTTP 200 calls 호출
reporter=&quot;destination&quot;,
source_workload=&quot;istio-ingressgateway&quot;,
source_workload_namespace=&quot;istio-system&quot;,
destination_workload=&quot;webapp&quot;,
destination_workload_namespace=&quot;istioinaction&quot;,
request_protocol=&quot;http&quot;,
connection_security_policy=&quot;mutual_tls&quot;,
} 5 # Number of HTTP 200 calls 호출 개수

istio_requests_total{
response_code=&quot;500&quot;, # HTTP 500 calls 호출
reporter=&quot;destination&quot;,
source_workload=&quot;istio-ingressgateway&quot;,
source_workload_namespace=&quot;istio-system&quot;,
destination_workload=&quot;webapp&quot;,
destination_workload_namespace=&quot;istioinaction&quot;,
request_protocol=&quot;http&quot;,
connection_security_policy=&quot;mutual_tls&quot;,
} 3 # Number of HTTP 500 calls 호출 개수&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d7a7e0f0829be92df3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;디멘션이 다르면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio_requests_total&lt;/span&gt; 에 대해 서로 다른 2개의 항목이 보인다. 여기서는 두 메트릭 간에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;response_code 디멘션이 다르다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23806eb30ae50934b10b6e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380b8b351e25f3fd50ae1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;특정 메트릭에 대해 채우고 보고할 디멘션은 설정할 때 지정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238076b547ff89d9cd4e3a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;특정 디멘션의 값은 어디서 가져올까?&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380f08ae9d8f344f11a1a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 프록시가 런타임에 갖고 있는 값인 속성에서 가져온다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380768149e79f5a4c9015&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 요청의 기본 속성 중 일부가 표 7.2에 나열돼 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1e6b8b2c1c238080911eefca38330eb0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;표 7.2 : 기본 엔보이 요청 속성(= Request attributes)&lt;/u&gt;&lt;/p&gt;
&lt;div class=&quot;notion-table__wrapper&quot; style=&quot;box-sizing: border-box; overflow-x: auto;&quot;&gt;
&lt;table class=&quot;notion-table col-header&quot; style=&quot;margin: 8px 0px 18px; border-collapse: collapse;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;
&lt;tr style=&quot;box-sizing: border-box; background-color: #e6e6e5;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 157px; max-width: 157px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;속성&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 277px; max-width: 277px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;설명&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 157px; max-width: 157px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;request.path&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 277px; max-width: 277px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;URL 중 경로 부분&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 157px; max-width: 157px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;request.url_parh&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 277px; max-width: 277px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;URL 중 경로 부분, 쿼리 문자열 제외&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 157px; max-width: 157px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;request.host&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 277px; max-width: 277px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;URL 중 호스트 부분&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 157px; max-width: 157px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;request.scheme&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 277px; max-width: 277px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;URL 중 스킴 부분(예: &amp;lsquo;http&amp;rsquo;)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 157px; max-width: 157px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;request.headers&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 277px; max-width: 277px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;요청 메서드 (예. &amp;lsquo;GET&amp;rsquo;)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 157px; max-width: 157px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;request.referer&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 277px; max-width: 277px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;요청 헤더 Referer&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 157px; max-width: 157px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;request.useragent&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 277px; max-width: 277px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;요청 헤더 User agent&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 157px; max-width: 157px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;request.time&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 277px; max-width: 277px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;첫 번째 바이트 수신 시간&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 157px; max-width: 157px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;request.id&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 277px; max-width: 277px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;x-request-id 헤더 값에 해당하는 요청 ID&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 157px; max-width: 157px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;request.protocol&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 277px; max-width: 277px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;요청 프로토콜&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238016862dcdfff2013c0b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380e68cfee19b1e3a36d9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이것들은 엔보이에서 사용할 수 있는 요청 속성일 뿐이다. 다른 속성도 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380cf9144cd5676a9c5df&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;응답 속성 Response attributes&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238024b237f18c8910e7a8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;커넥션 속성 Connection attributes&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380daa1d4c87551c19f35&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;업스트림 속성 Upstream attributes&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238004af93f48c94c2aea2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메타데이터/필터 상태 속성 Metadata/filter state attributes&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23803e8923eba7b6296f4c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;웹어셈블리 속성 Wasm attributes&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d18b4bf9f84c08da7f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이에서 기본적으로 사용할 수 있는 속성에 어떤 것들이 있는지는 엔보이 문서를 참조하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1e6b8b2c1c2380b68e11eeb00a3f2344&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/advanced/attributes#request-attributes&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/advanced/attributes#request-attributes&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380dd8dedea40895965d5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238026bb4af5f988e7725c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또 다른 속성 집합은 이스티오의 peer-metadata 필터(이스티오 프록시에 내장)에서 나오며, 서비스 호출의 upstream_peer와 downstream_peer 모두에서 사용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23804e8a11fa4ba066aa81&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;표 7.3은 사용 가능한 속성을 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1e6b8b2c1c2380f88018e5a16c0bc08a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;표 7.3 : 메타데이터 교환 필터가 제공하는 이스티오 전용 속성&lt;/u&gt;&lt;/p&gt;
&lt;div class=&quot;notion-table__wrapper&quot; style=&quot;box-sizing: border-box; overflow-x: auto;&quot;&gt;
&lt;table class=&quot;notion-table col-header&quot; style=&quot;margin: 8px 0px 18px; border-collapse: collapse;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;
&lt;tr style=&quot;box-sizing: border-box; background-color: #e6e6e5;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 120px; max-width: 240px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;속성&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 286px; max-width: 286px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;설명&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 120px; max-width: 240px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;name&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 286px; max-width: 286px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;파드 이름&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 120px; max-width: 240px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;namespace&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 286px; max-width: 286px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;파드가 위치한 네임스페이스&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 120px; max-width: 240px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;labels&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 286px; max-width: 286px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;워크로드 레이블&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 120px; max-width: 240px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;owner&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 286px; max-width: 286px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;워크로드 소유자&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 120px; max-width: 240px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;workload_name&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 286px; max-width: 286px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;워크로드 이름&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 120px; max-width: 240px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;platform_metadata&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 286px; max-width: 286px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;접두사 키가 있는 플랫폼 메타데이터&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 120px; max-width: 240px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;istio_version&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 286px; max-width: 286px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;프록시의 버전 식별자&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 120px; max-width: 240px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;mesh_id&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 286px; max-width: 286px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;메시의 고유 식별자&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 120px; max-width: 240px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;cluster_id&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 286px; max-width: 286px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;해당 워크로드가 속한 클러스터의 식별자&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 120px; max-width: 240px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;app_containers&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border-image: none 100% / 1 / 0 stretch; min-width: 286px; max-width: 286px; border: 1px solid #e9e9e7;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;애플리케이션 컨테이너별 짧은 이름 목록&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23804aa0a0d39b1e444b75&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380a29d93ca8e22916c00&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기 있는 속성을 사용하려면 업스트림(프록시에서 나가는) 메트릭인지, 다운스트림(프록시로 들어오는) 메트릭인지 따라 upstream_peer 나 downstream_peer 를 접두사로 붙이자.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380fba4b2ee3b91173e60&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어, 서비스 호출자의 이스티오 프록시 버전을 보려면 downstream_peer.istio_version 을 사용하자.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380bfbaa3dd1c5507160c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;업스트림 서비스의 클러스터를 보려면 upstream_peer.cluster_id 를 사용하자.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238016910dc1107058aff5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;속성은 디멘션의 값을 정의하는 데 사용한다. 속성을 사용해 기존 메트릭의 디멘션을 커스터마이징하는 방법을 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380aabb49faae002fcc7f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380c9aedefb259258bff6&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;7.4.1 Configuring existing metrics&lt;/span&gt; 기존 메트릭 확인 및 (디멘션) 수정 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/tasks/observability/metrics/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Metrics&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/tasks/observability/metrics/customize-metrics/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/tasks/observability/metrics/classify-metrics/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs2&lt;/a&gt; &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습~)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380bc87a7d116625e09da&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본적으로, 이스티오 메트릭은 이스티오를 설치할 때 설치되는 EnvoyFilter 리소스를 사용해 stats 프록시 플러그인에서 설정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380ba80a7e6d11160d6b4&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vim&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 메트릭 정보 수정 시 모든 버전의 envoyfilter 에 반영(업데이트)되는지 확인해보자.
kubectl get envoyfilter -n istio-system
NAME                    AGE
stats-filter-1.13       13h # 스터디 실습에서 사용
stats-filter-1.14       13h
stats-filter-1.15       13h
stats-filter-1.16       13h
stats-filter-1.17       13h # 현재 실습 istiod 버전
tcp-stats-filter-1.13   13h
tcp-stats-filter-1.14   13h
tcp-stats-filter-1.15   13h
tcp-stats-filter-1.16   13h
tcp-stats-filter-1.17   13h

#
kubectl get envoyfilter stats-filter-1.13 -n istio-system -o yaml
...
spec:
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: SIDECAR_OUTBOUND
      listener:
        filterChain:
          filter:
            name: envoy.filters.network.http_connection_manager
            subFilter:
              name: envoy.filters.http.router
      proxy:
        proxyVersion: ^1\.13.*
    patch:
      operation: INSERT_BEFORE
      value:
        name: istio.stats # 필터 이름
        typed_config:
          '@type': type.googleapis.com/udpa.type.v1.TypedStruct
          type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm
          value:
            config: # 필터 설정
              configuration:
                '@type': type.googleapis.com/google.protobuf.StringValue
                value: |
                  {
                    &quot;debug&quot;: &quot;false&quot;,
                    &quot;stat_prefix&quot;: &quot;istio&quot;
                  }
              root_id: stats_outbound
              vm_config:
                code:
                  local:
                    inline_string: envoy.wasm.stats
                runtime: envoy.wasm.runtime.null
                vm_id: stats_outbound
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380a99eefd8fac9537cc7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 엔보이 필터는 istio.stats 라는 필터를 직접 구성한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380cf8e13d0f413041159&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;통계(메트릭) 기능을 구현&lt;/span&gt;하는 웹어셈블리 플러그인이다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;WebAssembly&lt;/span&gt; (Wasm) &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;plugin.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23808b8cbec162cc227e21&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 웹어셈블리 필터는 실제로는 엔보이 코드베이스 내에서 직접 컴파일돼 NULL 가상머신에서 실행되므로, 웹어셈블리 가상머신에서 실행되지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23804a82fcc81bda267290&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 웹어셈블리 가상머신에서 실행하려면 istioctl 로 설치할 때 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;-&amp;ndash;setvalues.telemetry.v2.prometheus.wasmEnabled=true&lt;/code&gt; 플래그를 전달하거나 상응하는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;IstioOperator&lt;/code&gt; 설정을 해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380c7a335e6405076e295&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;웹어셈플리는 14장에서 좀 더 자세히 살펴본다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23809b858ae7dea3718827&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380db8467f447ceabb6f2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;ADDING &lt;/u&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;DIMENSIONS&lt;/u&gt;&lt;/span&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; TO EXISTING METRICS &lt;/u&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;기존 메트릭에 디멘션 추가하기&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23806a8029f3cb45304d8c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istio_request_total 메트릭에 디멘션을 2개 추가하고 싶다고 해보자.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238095adf0c75b90a6a55b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아마 추적을 강화하려는 목적으로, 업스트림 호출에서 meshId 별로 프록시의 버전이 어떤지 확인하고 싶을 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d0875ec367feed168d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;upstream_proxy_version&lt;/code&gt; 및 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;source_mesh_id&lt;/code&gt; 디멘션을 추가해보자. (추적하고 싶지 않거나 원하는 것보다 많은 정보를 생성하는 기존 디멘션을 제거할 수도 있다)&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380759d9bd41f034c82af&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;requests_total 메트릭(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio_ 접두사를 자동 추가로 붙이지 않은 점 확인&lt;/span&gt;)을 특정해 속성에서 오는 dimension 2개가 새로 포함되도록 설정하고 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23807bba7ec552b3e9b143&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 request_protocol 디멘션을 제거하기도 한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&amp;rarr; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/istio/istio/blob/release-1.17/pkg/bootstrap/config.go#L163&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Github_Code&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; (DefaultStatTags)&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238041a734c2e97e87658b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vim&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
cat ch7/metrics/istio-operator-new-dimensions.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: demo
  values:
    telemetry:
      v2:
        prometheus:
          configOverride:
            inboundSidecar:
              metrics:
              - name: requests_total
                dimensions: # 추가한 새 디멘션
                  upstream_proxy_version: upstream_peer.istio_version
                  source_mesh_id: node.metadata['MESH_ID']
                tags_to_remove: # 제거한 태그 목록
                - request_protocol
            outboundSidecar:
              metrics:
              - name: requests_total
                dimensions:
                  upstream_proxy_version: upstream_peer.istio_version
                  source_mesh_id: node.metadata['MESH_ID']
                tags_to_remove:
                - request_protocol
            gateway:
              metrics:
              - name: requests_total
                dimensions:
                  upstream_proxy_version: upstream_peer.istio_version
                  source_mesh_id: node.metadata['MESH_ID']
                tags_to_remove:
                - request_protocol

# 기존 설정 확인
kubectl get istiooperator installed-state -n istio-system -o yaml | grep -E &quot;prometheus:|telemetry:&quot; -A2
    telemetry:
      enabled: true
      v2:
--
        prometheus:
          enabled: true
          wasmEnabled: false

# 메트릭 확인 : request_protocol 디멘션이 메트릭에 있는지 먼저 확인 &amp;gt;&amp;gt; 아래 설정 적용 후에 확인 시 해당 dimenstion(=request_protocol) 없이 출력됨.
# 프로메테우스 UI 에서도 확인 : istio_requests_total - Link
# 현재 reporter가 각각 destination, source로 다른 dimension을 갖고있는 두개의 metrics가 있음.
kubectl -n istioinaction exec -it deploy/webapp -c istio-proxy \
-- curl localhost:15000/stats/prometheus | grep istio_requests_total
...
# TYPE istio_requests_total counter
istio_requests_total{reporter=&quot;destination&quot;,source_workload=&quot;istio-ingressgateway&quot;,...,request_protocol=&quot;http&quot;,response_code=&quot;200&quot;,grpc_response_status=&quot;&quot;,response_flags=&quot;-&quot;,connection_security_policy=&quot;mutual_tls&quot;} 2069
istio_requests_total{reporter=&quot;source&quot;,source_workload=&quot;webapp&quot;,...,request_protocol=&quot;http&quot;,response_code=&quot;200&quot;,grpc_response_status=&quot;&quot;,response_flags=&quot;-&quot;,connection_security_policy=&quot;unknown&quot;} 2069


# 설정 적용
docker exec -it myk8s-control-plane bash
----------------------------------------
# 파일 작성
cat &amp;lt;&amp;lt; EOF &amp;gt; istio-operator-new-dimensions.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: demo
  values:
    telemetry:
      v2:
        prometheus:
          configOverride:
            inboundSidecar:
              metrics:
              - name: requests_total
                dimensions:
                  upstream_proxy_version: upstream_peer.istio_version
                  source_mesh_id: node.metadata['MESH_ID']
                tags_to_remove:
                - request_protocol
            outboundSidecar:
              metrics:
              - name: requests_total
                dimensions:
                  upstream_proxy_version: upstream_peer.istio_version
                  source_mesh_id: node.metadata['MESH_ID']
                tags_to_remove:
                - request_protocol
            gateway:
              metrics:
              - name: requests_total
                dimensions:
                  upstream_proxy_version: upstream_peer.istio_version
                  source_mesh_id: node.metadata['MESH_ID']
                tags_to_remove:
                - request_protocol
EOF

istioctl verify-install -f istio-operator-new-dimensions.yaml # 리소스별로 적용결과를 출력
istioctl install -f istio-operator-new-dimensions.yaml -y

exit
----------------------------------------

# 변경 설정 확인
kubectl get istiooperator -n istio-system installed-state -o yaml | grep -E &quot;prometheus:&quot; -A9
        prometheus:
          configOverride:
            gateway:
              metrics:
              - dimensions:
                  source_mesh_id: node.metadata['MESH_ID']
                  upstream_proxy_version: upstream_peer.istio_version
                name: requests_total
                tags_to_remove:
                - request_protocol
                
# envoyfilter &quot;stats-filter-{stat-postfix}&quot;도 업데이트 확인
kubectl get envoyfilter stats-filter-1.13 -n istio-system -o yaml
...
spec:
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: SIDECAR_OUTBOUND
      listener:
        filterChain:
          filter:
            name: envoy.filters.network.http_connection_manager
            subFilter:
              name: envoy.filters.http.router
      proxy:
        proxyVersion: ^1\.13.*
    patch:
      operation: INSERT_BEFORE
      value:
        name: istio.stats
        typed_config:
          '@type': type.googleapis.com/udpa.type.v1.TypedStruct
          type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm
          value:
            config:
              configuration:
                '@type': type.googleapis.com/google.protobuf.StringValue
                value: |
                  {&quot;metrics&quot;:[{&quot;dimensions&quot;:{&quot;source_mesh_id&quot;:&quot;node.metadata['MESH_ID']&quot;,&quot;upstream_proxy_version&quot;:&quot;upstream_peer.istio_version&quot;},&quot;name&quot;:&quot;requests_total&quot;,&quot;tags_to_remove&quot;:[&quot;request_protocol&quot;]}]}
              root_id: stats_outbound
              vm_config:
                code:
                  local:
                    inline_string: envoy.wasm.stats
                runtime: envoy.wasm.runtime.null
                vm_id: stats_outbound
...

# 나머지 버전에서도 업데이트 반영되었는지 확인해보자.
kubectl get envoyfilter stats-filter-1.14 -n istio-system -o yaml | grep MESH_ID
kubectl get envoyfilter stats-filter-1.15 -n istio-system -o yaml | grep MESH_ID
kubectl get envoyfilter stats-filter-1.16 -n istio-system -o yaml | grep MESH_ID

kubectl get envoyfilter stats-filter-1.17 -n istio-system -o yaml | grep MESH_ID
{&quot;apiVersion&quot;:&quot;networking.istio.io/v1alpha3&quot;,&quot;kind&quot;:&quot;EnvoyFilter&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;install.operator.istio.io/owning-resource-namespace&quot;:&quot;istio-system&quot;,&quot;istio.io/rev&quot;:&quot;default&quot;,&quot;operator.istio.io/component&quot;:&quot;Pilot&quot;,&quot;operator.istio.io/managed&quot;:&quot;Reconcile&quot;,&quot;operator.istio.io/version&quot;:&quot;1.17.8&quot;},&quot;name&quot;:&quot;stats-filter-1.17&quot;,&quot;namespace&quot;:&quot;istio-system&quot;},&quot;spec&quot;:{&quot;configPatches&quot;:[{&quot;applyTo&quot;:&quot;HTTP_FILTER&quot;,&quot;match&quot;:{&quot;context&quot;:&quot;SIDECAR_OUTBOUND&quot;,&quot;listener&quot;:{&quot;filterChain&quot;:{&quot;filter&quot;:{&quot;name&quot;:&quot;envoy.filters.network.http_connection_manager&quot;,&quot;subFilter&quot;:{&quot;name&quot;:&quot;envoy.filters.http.router&quot;}}}},&quot;proxy&quot;:{&quot;proxyVersion&quot;:&quot;^1\\.17.*&quot;}},&quot;patch&quot;:{&quot;operation&quot;:&quot;INSERT_BEFORE&quot;,&quot;value&quot;:{&quot;name&quot;:&quot;istio.stats&quot;,&quot;typed_config&quot;:{&quot;@type&quot;:&quot;type.googleapis.com/udpa.type.v1.TypedStruct&quot;,&quot;type_url&quot;:&quot;type.googleapis.com/stats.PluginConfig&quot;,&quot;value&quot;:{&quot;metrics&quot;:[{&quot;dimensions&quot;:{&quot;source_mesh_id&quot;:&quot;node.metadata['MESH_ID']&quot;,&quot;upstream_proxy_version&quot;:&quot;upstream_peer.istio_version&quot;},&quot;name&quot;:&quot;requests_total&quot;,&quot;tags_to_remove&quot;:[&quot;request_protocol&quot;]}]}}}}},{&quot;applyTo&quot;:&quot;HTTP_FILTER&quot;,&quot;match&quot;:{&quot;context&quot;:&quot;SIDECAR_INBOUND&quot;,&quot;listener&quot;:{&quot;filterChain&quot;:{&quot;filter&quot;:{&quot;name&quot;:&quot;envoy.filters.network.http_connection_manager&quot;,&quot;subFilter&quot;:{&quot;name&quot;:&quot;envoy.filters.http.router&quot;}}}},&quot;proxy&quot;:{&quot;proxyVersion&quot;:&quot;^1\\.17.*&quot;}},&quot;patch&quot;:{&quot;operation&quot;:&quot;INSERT_BEFORE&quot;,&quot;value&quot;:{&quot;name&quot;:&quot;istio.stats&quot;,&quot;typed_config&quot;:{&quot;@type&quot;:&quot;type.googleapis.com/udpa.type.v1.TypedStruct&quot;,&quot;type_url&quot;:&quot;type.googleapis.com/stats.PluginConfig&quot;,&quot;value&quot;:{&quot;metrics&quot;:[{&quot;dimensions&quot;:{&quot;source_mesh_id&quot;:&quot;node.metadata['MESH_ID']&quot;,&quot;upstream_proxy_version&quot;:&quot;upstream_peer.istio_version&quot;},&quot;name&quot;:&quot;requests_total&quot;,&quot;tags_to_remove&quot;:[&quot;request_protocol&quot;]}]}}}}},{&quot;applyTo&quot;:&quot;HTTP_FILTER&quot;,&quot;match&quot;:{&quot;context&quot;:&quot;GATEWAY&quot;,&quot;listener&quot;:{&quot;filterChain&quot;:{&quot;filter&quot;:{&quot;name&quot;:&quot;envoy.filters.network.http_connection_manager&quot;,&quot;subFilter&quot;:{&quot;name&quot;:&quot;envoy.filters.http.router&quot;}}}},&quot;proxy&quot;:{&quot;proxyVersion&quot;:&quot;^1\\.17.*&quot;}},&quot;patch&quot;:{&quot;operation&quot;:&quot;INSERT_BEFORE&quot;,&quot;value&quot;:{&quot;name&quot;:&quot;istio.stats&quot;,&quot;typed_config&quot;:{&quot;@type&quot;:&quot;type.googleapis.com/udpa.type.v1.TypedStruct&quot;,&quot;type_url&quot;:&quot;type.googleapis.com/stats.PluginConfig&quot;,&quot;value&quot;:{&quot;metrics&quot;:[{&quot;dimensions&quot;:{&quot;source_mesh_id&quot;:&quot;node.metadata['MESH_ID']&quot;,&quot;upstream_proxy_version&quot;:&quot;upstream_peer.istio_version&quot;},&quot;name&quot;:&quot;requests_total&quot;,&quot;tags_to_remove&quot;:[&quot;request_protocol&quot;]}]}}}}}],&quot;priority&quot;:-1}}
                source_mesh_id: node.metadata['MESH_ID']
                source_mesh_id: node.metadata['MESH_ID']
                source_mesh_id: node.metadata['MESH_ID']&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380a9925df54c60ce835f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238008ba85e6e39737df1a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메트릭에서 이 디멘션을 확인하기 전에 이스티오의 프록시가 이 디멘션에 대해 알게 해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380aaa975f575f7268e1d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이렇게 하려면 디플로이먼트 파드 Spec에 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;sidecar.istio.io/extraStatTags&lt;/code&gt; 애노테이션을 달아야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380babb8cc8f1f896de80&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 애노테이션은 디폴이먼트 메타데이터가 아니라 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;spec.template.metadata&lt;/code&gt; 파드 템플릿에 추가돼야 한다는 점을 유의하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380e4939cddaacb83b002&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 943.062px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1e6b8b2c1c238025964aececfd793725&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;istio 1.17+ 부터 custom dimension 에 대한 annotation (extraStatTags) 설정이 필요없어짐. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/news/releases/1.17.x/announcing-1.17/change-notes/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Updated&amp;nbsp;the Telemetry API to use a new native extension (stats) for Prometheus stats instead of the Wasm-based extension. This improves CPU overhead and memory usage of the feature. &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Custom dimensions no longer require regex and &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;bootstrap annotations.&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23808dab45c458fba2c217&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380f7bb5bea9f49d8e65c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;적용 해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380a08b51ddf1662be074&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
cat ch7/metrics/webapp-deployment-extrastats.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: webapp
  name: webapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |-
          extraStatTags: 
          - &quot;upstream_proxy_version&quot;
          - &quot;source_mesh_id&quot;
      labels:
        app: webapp
    spec:
      containers:
      - env:
        - name: KUBERNETES_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        image: istioinaction/webapp:latest
        imagePullPolicy: IfNotPresent
        name: webapp
        ports:
        - containerPort: 8080
          name: http
          protocol: TCP
        securityContext:
          privileged: false

#
kubectl apply -n istioinaction -f ch7/metrics/webapp-deployment-extrastats.yaml

# metric 확인을 위해서 호출테스트
for in in {1..10}; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; sleep 0.5; done
while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done

# 메트릭 확인 : request_protocol 디멘션이 디멘션 목록에 없는 것도 확인
kubectl -n istioinaction exec -it deploy/webapp -c istio-proxy \
-- curl localhost:15000/stats/prometheus | grep istio_requests_total
istio_requests_total{reporter=&quot;destination&quot;,source_workload=&quot;istio-ingressgateway&quot;,source_canonical_service=&quot;istio-ingressgateway&quot;,source_canonical_revision=&quot;latest&quot;,source_workload_namespace=&quot;istio-system&quot;,source_principal=&quot;spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account&quot;,source_app=&quot;istio-ingressgateway&quot;,source_version=&quot;unknown&quot;,source_cluster=&quot;Kubernetes&quot;,destination_workload=&quot;webapp&quot;,destination_workload_namespace=&quot;istioinaction&quot;,destination_principal=&quot;spiffe://cluster.local/ns/istioinaction/sa/webapp&quot;,destination_app=&quot;webapp&quot;,destination_version=&quot;&quot;,destination_service=&quot;webapp.istioinaction.svc.cluster.local&quot;,destination_canonical_service=&quot;webapp&quot;,destination_canonical_revision=&quot;latest&quot;,destination_service_name=&quot;webapp&quot;,destination_service_namespace=&quot;istioinaction&quot;,destination_cluster=&quot;Kubernetes&quot;,response_code=&quot;200&quot;,grpc_response_status=&quot;&quot;,response_flags=&quot;-&quot;,connection_security_policy=&quot;mutual_tls&quot;,source_mesh_id=&quot;cluster.local&quot;,upstream_proxy_version=&quot;unknown&quot;} 10
istio_requests_total{reporter=&quot;source&quot;,source_workload=&quot;webapp&quot;,source_canonical_service=&quot;webapp&quot;,source_canonical_revision=&quot;latest&quot;,source_workload_namespace=&quot;istioinaction&quot;,source_principal=&quot;spiffe://cluster.local/ns/istioinaction/sa/webapp&quot;,source_app=&quot;webapp&quot;,source_version=&quot;&quot;,source_cluster=&quot;Kubernetes&quot;,destination_workload=&quot;catalog&quot;,destination_workload_namespace=&quot;istioinaction&quot;,destination_principal=&quot;spiffe://cluster.local/ns/istioinaction/sa/catalog&quot;,destination_app=&quot;catalog&quot;,destination_version=&quot;v1&quot;,destination_service=&quot;catalog.istioinaction.svc.cluster.local&quot;,destination_canonical_service=&quot;catalog&quot;,destination_canonical_revision=&quot;v1&quot;,destination_service_name=&quot;catalog&quot;,destination_service_namespace=&quot;istioinaction&quot;,destination_cluster=&quot;Kubernetes&quot;,response_code=&quot;200&quot;,grpc_response_status=&quot;&quot;,response_flags=&quot;-&quot;,connection_security_policy=&quot;unknown&quot;,source_mesh_id=&quot;cluster.local&quot;,upstream_proxy_version=&quot;1.17.8&quot;} 10
...
istio_requests_total{
  reporter=&quot;source&quot;,
  source_workload=&quot;webapp&quot;,
  source_canonical_service=&quot;webapp&quot;,
  source_canonical_revision=&quot;latest&quot;,
  source_workload_namespace=&quot;istioinaction&quot;,
  source_principal=&quot;spiffe://cluster.local/ns/istioinaction/sa/webapp&quot;,
  source_app=&quot;webapp&quot;,source_version=&quot;&quot;,
  source_cluster=&quot;Kubernetes&quot;,
  destination_workload=&quot;catalog&quot;,
  destination_workload_namespace=&quot;istioinaction&quot;,
  destination_principal=&quot;spiffe://cluster.local/ns/istioinaction/sa/catalog&quot;,
  destination_app=&quot;catalog&quot;,
  destination_version=&quot;v1&quot;,
  destination_service=&quot;catalog.istioinaction.svc.cluster.local&quot;,
  destination_canonical_service=&quot;catalog&quot;,
  destination_canonical_revision=&quot;v1&quot;,
  destination_service_name=&quot;catalog&quot;,
  destination_service_namespace=&quot;istioinaction&quot;,
  destination_cluster=&quot;Kubernetes&quot;,
  response_code=&quot;200&quot;,
  grpc_response_status=&quot;&quot;,
  response_flags=&quot;-&quot;,
  connection_security_policy=&quot;unknown&quot;,
  source_mesh_id=&quot;cluster.local&quot;, # 메시 ID
  upstream_proxy_version=&quot;1.17.8&quot; # 업스트림 프록시
} 10&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380b58655d0af8f08a6e5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스 UI 에서 확인 : &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;istio_requests_total&lt;/code&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://127.0.0.1:30001/graph?g0.expr=istio_requests_total&amp;amp;g0.tab=1&amp;amp;g0.stacked=0&amp;amp;g0.range_input=1h&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23809eb60de8f28693b38d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/ad520a9f-647f-46aa-a81a-35a1e2b7435a/CleanShot_2025-04-27_at_13.00.36.png?table=block&amp;amp;id=1e6b8b2c-1c23-809e-b60d-e8f28693b38d&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=7rqHL0YZHkvM3woBFm_i0weTMKmr6vIeDV1SsM7LK_Y&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;312.74588665447897&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380209a8ce268426ed39f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380969d1fdffcde040080&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(참고) &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Telemetry&lt;/span&gt; 로 istioinaction 네임스페이스에 dimension을 추가/삭제 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://netpple.github.io/docs/istio-in-action/Istio-ch7-observability#741-configuring-existing-metrics&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt; , &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380d2921efd0851fa83f6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cat ch7/metrics/v2/add-dimensions-telemetry.yaml
---
apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
  name: add-dimension-tags
  namespace: istioinaction
spec:
  metrics:
  - providers:
      - name: prometheus
    overrides:
      - match:
          metric: REQUEST_COUNT
          mode: CLIENT_AND_SERVER
        disabled: false
        tagOverrides:
          upstream_proxy_version:
            operation: UPSERT
            value: upstream_peer.istio_version
          source_mesh_id:
            operation: UPSERT
            value: node.metadata['MESH_ID']
          request_protocol:
            operation: REMOVE

#
kubectl apply -n istioinaction -f ch7/metrics/v2/add-dimensions-telemetry.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23800b9987e74704d20115&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380b79019d4b550c5387a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;7.4.2 Creating new metrics&lt;/span&gt; 새로운 메트릭 만들기&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d2be4effa5642da00c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istio_requests_total 같은 기존 표준 메트릭의 디멘션을 커스터마이징하는 방법을 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380979336f74519d2b250&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그런데 새 메트릭을 만들고 싶다면 어떻게 해야 할까?&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238007a523f50ff682d745&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;stats 플러그인에 새 메트릭을 정의하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380838554c90638b17e3c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cat ch7/metrics/istio-operator-new-metric.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: demo
  values:
    telemetry:
      v2:
        prometheus:
          configOverride:
            inboundSidecar:
              definitions:
              - name: get_calls
                type: COUNTER
                value: &quot;(request.method.startsWith('GET') ? 1 : 0)&quot;
            outboundSidecar:
              definitions:
              - name: get_calls
                type: COUNTER
                value: &quot;(request.method.startsWith('GET') ? 1 : 0)&quot;
            gateway:
              definitions:
              - name: get_calls
                type: COUNTER
                value: &quot;(request.method.startsWith('GET') ? 1 : 0)&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23804e8ea2ff23800b9081&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380c28febe7f6336b4625&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서 만든 메트릭은 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio_get_calls&lt;/span&gt;&lt;/code&gt; 인데, 정의한 이름은 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;get_calls&lt;/code&gt; 라는 점을 유의하자. 앞서 언급했듯이 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;istio_&lt;/code&gt; 접두사는 자동으로 붙는다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380e785ceef2df8e6ad36&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 메트릭을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;COUNTER&lt;/span&gt;로 정의했지만 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;GAUGE&lt;/span&gt; 나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HISTOGRAM&lt;/span&gt;도 선택할 수 있다. 메트릭의 값은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CEL&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; Common Expression Language&lt;/span&gt; 표현식인 문자열로, COUNTER 타입에 정수를 반환해야 한다. &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/google/cel-spec&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/google/cel-spec&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23808485fbfa65a44c2114&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;CEL 표현식은 속성에 대해 작동하여, 여기서는 HTTP GET 요청 개수를 센다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238069b552eff0d7471a22&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 설정을 적용해 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;istio_get_calls&lt;/code&gt; 라는 새 메트릭을 만들어보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23805f961cc2a0ac96ac38&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 설정 적용
docker exec -it myk8s-control-plane bash
----------------------------------------
cat &amp;lt;&amp;lt; EOF &amp;gt; istio-operator-new-metric.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: demo
  values:
    telemetry:
      v2:
        prometheus:
          configOverride:
            inboundSidecar:
              definitions:
              - name: get_calls
                type: COUNTER
                value: &quot;(request.method.startsWith('GET') ? 1 : 0)&quot;
            outboundSidecar:
              definitions:
              - name: get_calls
                type: COUNTER
                value: &quot;(request.method.startsWith('GET') ? 1 : 0)&quot;
            gateway:
              definitions:
              - name: get_calls
                type: COUNTER
                value: &quot;(request.method.startsWith('GET') ? 1 : 0)&quot;
EOF

istioctl verify-install -f istio-operator-new-metric.yaml # 리소스별로 적용결과를 출력
istioctl install -f istio-operator-new-metric.yaml -y

exit
----------------------------------------

# 확인
kubectl get istiooperator -n istio-system installed-state -o yaml  | grep -A2 get_calls$
              - name: get_calls
                type: COUNTER
                value: '(request.method.startsWith(''GET'') ? 1 : 0)''
...

kubectl get envoyfilter -n istio-system stats-filter-1.13 -o yaml | grep get_calls
...
{&quot;definitions&quot;:[{&quot;name&quot;:&quot;get_calls&quot;,&quot;type&quot;:&quot;COUNTER&quot;,&quot;value&quot;:&quot;(request.method.startsWith('GET') ? 1 : 0)&quot;}]}
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380c9a6c7dfe5911bbce8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238050babec21c5db25bc5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞 절에서는 새 디멘션은 이스티오 프록시에 명시적으로 알려야 했다. 새 메트릭을 만들때는 프록시에 노출하라고 이스티오에 알려아 한다. &lt;i&gt;&amp;rarr; 1.17 안해도됨&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238027ab0be1115fba7b25&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# webapp 디플로이먼트의 파드 사양에 애너테이션을 추가한다
cat ch7/metrics/webapp-deployment-new-metric.yaml
...
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |-
          proxyStatsMatcher:
            inclusionPrefixes:
            - &quot;istio_get_calls&quot;
      labels:
        app: webapp
...

#
kubectl -n istioinaction apply -f ch7/metrics/webapp-deployment-new-metric.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380bc9570c0a977e5b850&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380168b97ef734d9f29a1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;호출 테스트 후 새 메트릭 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23804d98c0e5201c21c0ce&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;perl&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# metric 확인을 위해서 호출테스트
for in in {1..10}; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; sleep 0.5; done
while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done

# 메트릭 확인
kubectl -n istioinaction exec -it deploy/webapp -c istio-proxy -- curl localhost:15000/stats/prometheus | grep istio_get_calls
# TYPE istio_get_calls counter
istio_get_calls{} 10&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380bea716e6ebe5091d97&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스 UI 확인 : istio_get_calls - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://127.0.0.1:30001/graph?g0.expr=istio_get_calls&amp;amp;g0.tab=1&amp;amp;g0.stacked=0&amp;amp;g0.range_input=1h&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380699573c1d289f8ceac&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/6ce9ca05-6c6d-41fd-b6bd-960b7f13b806/image.png?table=block&amp;amp;id=1e6b8b2c-1c23-8069-9573-c1d289f8ceac&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=POAj7kI7lFFCRezm3BeYJtPMPmvX0eJaeRtNe9-sPO0&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;258.9736477115118&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380d78ed0fa68799be36e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23806ba440fa74b7988b22&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 메트릭에는 어떤 디멘션도 지정하지 않았다. 보고 싶은 디멘션을 맞춤 설정하고 싶다면 앞 절의 단계를 따르면 된다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380ac87bccc3a376097bd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서는 시스템 내 모든 요청 중 GET 요청의 개수를 세려고 한다. 이는 새로운 메트릭을 생성하는 기능의 힘을 보여주기 위해 고안한 예제다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23800d8ed3ebbc6b0c773c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;catalog 서비스의 /items 엔드포인트로 향하는 모든 GET 요청의 개수를 세고 싶다면 어떻게 해야 할까?&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d79c60ead827dd1d6f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 stats 플러그인을 사용하면 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380be88d4e80de0bcf304&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;새로운 디멘션과 속성을 만들어 더 세분화할 수 있다. 다음 절에서 알아보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23805a8b0dd105c88c585b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238081a04dd7a419f19464&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;7.4.3 Grouping calls with new attributes&lt;/span&gt; 새 속성으로 호출 그룹화하기&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380b59295d4dc7e061e1a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기존 속성을 기반으로 더 세분화하거나 도메인에 특화해 새 속성을 만들 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380bd8625ed77fadc5784&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio_operationId&lt;/span&gt; 라는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;새 속성&lt;/span&gt;을 만들 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380c48a47fb935d9c6ff9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 속성은 request.path_url 과 request.method 를 조합해 catalog 서비스의 /items API로 가는 GET 호출 개수를 추적하려는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238015b152cf9bd28f9220&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23804fa4a9dca41cd5da6b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 위해 이스티오 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;attribute-gen 프록시 플러그인&lt;/span&gt;을 사용하는데, 이 플러그인은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프록시 메트릭의 동작을 개조하는 데 사용하는 또 다른 웹어셈블리 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Wasm extension &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;확장&lt;/span&gt;이다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380e7831cfb99a12ae879&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;attribute-gen 플러그인은 앞 절에서 사용했던 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;stats 플러그인&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;보완&lt;/span&gt;하는 역할을 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380b3b9c7c2cfe1b86c60&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;attribute-gen 플러그인은 stats 플러그인 보다 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;먼저 적용&lt;/span&gt;되기 때문에 이 플러그인이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;만들어내는 모든 속성을 stats 에서 사용&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380b39e0fffa8eb6ded79&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238021a54fcf6b3f2bfbf5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;EnvoyFilter 리소스로 attribute-gen 플러그인을 구성하는 방법을 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23802783aed7b428bb2baf&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vim&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;cat ch7/metrics/attribute-gen.yaml
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: attribute-gen-example
  namespace: istioinaction
spec:
  configPatches:
  ## Sidecar Outbound 
  - applyTo: HTTP_FILTER
    match:
      context: SIDECAR_OUTBOUND
      listener:
        filterChain:
          filter:
            name: envoy.filters.network.http_connection_manager
            subFilter:
              name: istio.stats
      proxy:
        proxyVersion: ^1\.13.*
    patch:
      operation: INSERT_BEFORE
      value:
        name: istio.attributegen
        typed_config:
          '@type': type.googleapis.com/udpa.type.v1.TypedStruct
          type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm
          value:
            config:
              configuration:
                '@type': type.googleapis.com/google.protobuf.StringValue
                value: |
                  {
                    &quot;attributes&quot;: [
                      {
                        &quot;output_attribute&quot;: &quot;istio_operationId&quot;, # 속성 이름
                        &quot;match&quot;: [
                         {
                           &quot;value&quot;: &quot;getitems&quot;, # 속성 값
                           &quot;condition&quot;: &quot;request.url_path == '/items' &amp;amp;&amp;amp; request.method == 'GET'&quot;
                         },
                         {
                           &quot;value&quot;: &quot;createitem&quot;,
                           &quot;condition&quot;: &quot;request.url_path == '/items' &amp;amp;&amp;amp; request.method == 'POST'&quot;
                         },     
                         {
                           &quot;value&quot;: &quot;deleteitem&quot;,
                           &quot;condition&quot;: &quot;request.url_path == '/items' &amp;amp;&amp;amp; request.method == 'DELETE'&quot;
                         }                                             
                       ]
                      }
                    ]
                  }
              vm_config:
                code:
                  local:
                    inline_string: envoy.wasm.attributegen
                runtime: envoy.wasm.runtime.null&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238051b4f8d236f5296a40&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380fab86ed4b672e95d45&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 설정은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본 속성 몇 가지를 조합&lt;/span&gt;해서 특정 종류의 호출을 식별할 수 있는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;istio_operationId&lt;/code&gt; 라는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;새 속성&lt;/span&gt;을 만들어낸다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380c8bcd9f4a15bca56b0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서는 /items 라는 특정 API 로의 호출을 식별한 후 세려고 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23809f9746e58ea26b70a4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 attribute-gen 플러그인을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;webapp&lt;/span&gt; 서비스의 아웃바운드 호출에 추가해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;catalog&lt;/span&gt; 서비스의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;/items&lt;/span&gt; 로 향햐는 호출을 추적한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380118d60c3126a8e98dc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380f19401e09b65e5fed7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 attribute-gen.yaml 을 적용하기 전에&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;proxyVersion: ^1\.16.*&lt;/code&gt;&amp;nbsp;을 설치된 istio 버전에 맞게 1.16 혹은 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1.17&lt;/span&gt;&lt;/code&gt; 로 수정.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380f29492d73500c1989a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
docker exec -it myk8s-control-plane istioctl version
client version: 1.17.8
control plane version: 1.17.8
data plane version: 1.17.8 (4 proxies)

#
vi ch7/metrics/attribute-gen.yaml # 혹은 open ch7/metrics/attribute-gen.yaml 후 수정
...
      proxy:
        proxyVersion: ^1\.17.* # 수정
...

# 버전을 수정 후 envoyfilter 를 배포합니다. envoyfilter를 배포한 네임스페이스의 istio-proxy들에 적용 됩니다
kubectl apply -f ch7/metrics/attribute-gen.yaml -n istioinaction

# 확인
kubectl get envoyfilter -n istioinaction -o yaml | kubectl neat
kubectl get envoyfilter -n istioinaction
NAME                    AGE
attribute-gen-example   12s
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380d08592cddf7bcf6012&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380eebef7d446f81a3727&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;catalog 에 대한 API 호출을 식별하기 위해 istio_request_total 메트릭 안에 이 속성을 사용하는 새 디멘션 upstream_operator 을 추가할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238038a3c6e50573b2a651&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;stats 플러그인 설정을 업데이트 하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238095880ce57dd2214557&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;properties&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 설정 적용
docker exec -it myk8s-control-plane bash
----------------------------------------
cat &amp;lt;&amp;lt; EOF &amp;gt; istio-operator-new-attribute.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: demo
  values:
    telemetry:
      v2:
        prometheus:
          configOverride:
            outboundSidecar:
              metrics:
              - name: requests_total
                dimensions:
                  upstream_operation: istio_operationId # 새 디멘션
EOF
istioctl verify-install -f istio-operator-new-attribute.yaml # 리소스별로 적용결과를 출력
istioctl install -f istio-operator-new-attribute.yaml -y

exit
----------------------------------------

# 확인 : outboundSidecar 에만 적용됨
kubectl get istiooperator -n istio-system installed-state -o yaml | grep -B2 -A1 istio_operationId$
              metrics:
              - dimensions:
                  upstream_operation: istio_operationId
                name: requests_total

#
kubectl get envoyfilter -n istio-system stats-filter-1.17 -o yaml | kubectl neat
...
spec:
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: SIDECAR_OUTBOUND
      listener:
        filterChain:
          filter:
            name: envoy.filters.network.http_connection_manager
            subFilter:
              name: envoy.filters.http.router
      proxy:
        proxyVersion: ^1\.17.*
    patch:
      operation: INSERT_BEFORE
      value:
        name: istio.stats
        typed_config:
          '@type': type.googleapis.com/udpa.type.v1.TypedStruct
          type_url: type.googleapis.com/stats.PluginConfig
          value:
            metrics:
            - dimensions:
                upstream_operation: istio_operationId
              name: requests_total
...

kubectl get envoyfilter -n istio-system stats-filter-1.16 -o yaml | grep istio_operationId -B15 -A5
kubectl get envoyfilter -n istio-system stats-filter-1.15 -o yaml | grep istio_operationId -B15 -A5
kubectl get envoyfilter -n istio-system stats-filter-1.14 -o yaml | grep istio_operationId -B15 -A5
kubectl get envoyfilter -n istio-system stats-filter-1.13 -o yaml | grep istio_operationId -B15 -A5
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23802fa98af1fcd25852ef&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238031aa09fd3cfd38a3b7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;새 디멘션을 사용할 때는 서비스의 extraStats 애노테이션에도 추가해야 한다. &amp;larr; istio 1.17 version 이상 부터는 안해도됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380408ce3de619258611b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;gradle&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# cat ch7/metrics/webapp-deployment-extrastats-new-attr.yaml
# kubectl -n istioinaction apply -f ch7/metrics/webapp-deployment-extrastats-new-attr.yaml &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380e99554ddf4ff76d216&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d1bf8ee3abdd455a03&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;호출 후 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380ae9d57c5be8d447863&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;perl&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# metric 확인을 위해서 호출테스트
for in in {1..10}; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; sleep 0.5; done
while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done

# 메트릭 확인 : dimension (upstream_operation) 추가 확인!
kubectl -n istioinaction exec -it deploy/webapp -c istio-proxy -- curl localhost:15000/stats/prometheus | grep istio_requests_total
istio_requests_total{reporter=&quot;destination&quot;,source_workload=&quot;istio-ingressgateway&quot;,source_canonical_service=&quot;istio-ingressgateway&quot;,source_canonical_revision=&quot;latest&quot;,source_workload_namespace=&quot;istio-system&quot;,source_principal=&quot;spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account&quot;,source_app=&quot;istio-ingressgateway&quot;,source_version=&quot;unknown&quot;,source_cluster=&quot;Kubernetes&quot;,destination_workload=&quot;webapp&quot;,destination_workload_namespace=&quot;istioinaction&quot;,destination_principal=&quot;spiffe://cluster.local/ns/istioinaction/sa/webapp&quot;,destination_app=&quot;webapp&quot;,destination_version=&quot;&quot;,destination_service=&quot;webapp.istioinaction.svc.cluster.local&quot;,destination_canonical_service=&quot;webapp&quot;,destination_canonical_revision=&quot;latest&quot;,destination_service_name=&quot;webapp&quot;,destination_service_namespace=&quot;istioinaction&quot;,destination_cluster=&quot;Kubernetes&quot;,request_protocol=&quot;http&quot;,response_code=&quot;200&quot;,grpc_response_status=&quot;&quot;,response_flags=&quot;-&quot;,connection_security_policy=&quot;mutual_tls&quot;} 10
istio_requests_total{reporter=&quot;source&quot;,source_workload=&quot;webapp&quot;,source_canonical_service=&quot;webapp&quot;,source_canonical_revision=&quot;latest&quot;,source_workload_namespace=&quot;istioinaction&quot;,source_principal=&quot;spiffe://cluster.local/ns/istioinaction/sa/webapp&quot;,source_app=&quot;webapp&quot;,source_version=&quot;&quot;,source_cluster=&quot;Kubernetes&quot;,destination_workload=&quot;catalog&quot;,destination_workload_namespace=&quot;istioinaction&quot;,destination_principal=&quot;spiffe://cluster.local/ns/istioinaction/sa/catalog&quot;,destination_app=&quot;catalog&quot;,destination_version=&quot;v1&quot;,destination_service=&quot;catalog.istioinaction.svc.cluster.local&quot;,destination_canonical_service=&quot;catalog&quot;,destination_canonical_revision=&quot;v1&quot;,destination_service_name=&quot;catalog&quot;,destination_service_namespace=&quot;istioinac
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238037aea1d8928532fa6f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스 UI : &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio_requests_total&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;{upstream_operation&lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;!=&quot;&quot;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;}&lt;/code&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://127.0.0.1:30001/graph?g0.expr=istio_requests_total%7Bupstream_operation!%3D%22%22%7D&amp;amp;g0.tab=1&amp;amp;g0.stacked=0&amp;amp;g0.range_input=15m&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt; 쿼리(빈 문자열 아닌 경우)&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23803f8a26daab6ab3ce52&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/1f44771a-b287-4b8d-baa1-8b85f2ce3fdb/CleanShot_2025-04-27_at_14.28.58.png?table=block&amp;amp;id=1e6b8b2c-1c23-803f-8a26-daab6ab3ce52&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=pQWiGTXNjIvrLH-HgHsRuXOJ4zvfVdWSEXkAqLqvqBE&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;387.48949919224555&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238004b6f8fca5a5789d2d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio_requests_total&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;{upstream_operation&lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;=~&quot;getitems&quot;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;}&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23808aa355da5e1665c24f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/32287a43-aad6-4d5c-8528-879467ecace6/image.png?table=block&amp;amp;id=1e6b8b2c-1c23-808a-a355-da5e1665c24f&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=uzZ9zzzl1JYxuyYmhGUMpXsf4tmRLo4cQjIVJY1eIB4&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;573.1843575418994&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23807ca821c9ec099edf4d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23801987c0d7f2525048dc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;새 디멘션이 추가됐으며, 이로써 이번 장을 마무리한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380f2b424d65e3579c8b5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션 간에 네트워크를 통한 통신이 늘어날수록 문제가 발생할 가능성이 더 높아진다는 것을 알아야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23809dbe12fe0c5516f1d2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;누가 애플리케이션을 작성했든, 무슨 언어를 사용했든 상관없이&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 서비스 간에 무슨 일이 일어나고 있는지에 한결같은 시야&lt;/span&gt;를 갖는 것은 마이크로서비스 스타일 아키텍처를 운영하는 데 필수 조건이나 마찬가지다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380c0a3e4fc51938e2243&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 서비스 간 메트릭 수집을 더 쉽게 만드는데, 개발자가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션에 명시적으로 코딩하지 않아도 성공률, 실패율, 재시도 횟수, 지연 시간 등을 관찰&lt;/span&gt;하기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380a8a797f4aef0e2131a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이들은 분명히 필요하며, 이스티오는 다만 황금 신호 네트워크 메트릭 수집을 간편하게 만들 뿐이다. (구글 SRE 책은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;지연 시간, 처리량, 오류, 포화도&lt;/span&gt;를 황금 신호 메트릭으로 지칭한다)&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380b39db3c68ee42870c4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://sre.google/sre-book/monitoring-distributed-systems/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://sre.google/sre-book/monitoring-distributed-systems/&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380b4a841d91b10a71aa1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;golden-signal metrics: latency, throughput, errors, and saturation.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238084b4a7c499b8a953d1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23801191f3c9d1ad1f00ba&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 장에서는 이스티오 서비스 프록시(엔보인 프록시)와 컨트롤 플레인에서 메트릭을 긁어오는 방법, 노출된 메트릭을 확장하는 방법, 프로메테우스 같은 시계열 시스템에 메트릭을 집계하는 방법을 다뤘다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380cb9474c9460be313e2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 장에서 살펴보겠지만, 이와 같은 내용을 바당으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;그라파나&lt;/span&gt;나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;키알리&lt;/span&gt;를 사용해 메트릭을 시각화할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23808f8683d944d95e8ec1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380bca3a2f5d66e041807&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23807fb9acefdcbe19f12b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;7.5. Summary&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d6aef3cee28c5c1d8d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;모니터링은 알려진 바람직하지 않은 상태를 관찰하기 위해 메트릭를 수집하고 집계하여 수정 조치를 취할 수 있도록 하는 과정입니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238067b472db7fc045f715&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Monitoring is the process of collecting and aggregating metrics to watch for known undesirable states so that corrective measures can be taken.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380ec8809de0de03443a4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Istio는 사이드카 프록시에서 요청을 가로챌 때 모니터링에 사용되는 메트릭을 수집합니다. 프록시는 7계층(애플리케이션 네트워킹 계층)에서 작동하기 때문에 메트릭에 사용할 수 있는 상태 코드, HTTP 메서드, 헤더 등 다양한 정보에 액세스할 수 있습니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380fa9729f49cc89bf4b0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Istio collects the metrics used for monitoring when intercepting requests in the sidecar proxy. Because the proxy acts at layer 7 (the application-networking layer), it has access to a great deal of information such as status codes, HTTP methods, and headers that can be used in metrics. &lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380749719fbfdea4fb389&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;핵심 지표 중 하나는 istio_requests_total로, 요청을 카운트하고 상태 코드 200으로 끝나는 요청 수와 같은 질문에 답합니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238013818bd23a1ba88e83&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;One of the key metrics is istio_requests_total, which counts requests and answers questions such as how many requests ended with status code 200.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e6b8b2c1c238026bc3deaa3dfdbeedb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시에 의해 노출된 지표는 관측 가능한 시스템을 구축하는 기초를 마련합니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23804493ebc559cb0ee17b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The metrics exposed by the proxies set the foundation to build an observable system.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e6b8b2c1c238008afc5c692220f2669&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메트릭 수집 시스템은 프록시에서 노출된 메트릭을 수집하고 집계합니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380afa632f8fb3fa152e7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Metrics-collection systems collect and aggregate the exposed metrics from the proxies.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d9b29fdf3bf5485f53&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본적으로 Istio는 프록시가 제한된 통계 집합만 표시하도록 구성합니다. meshConfig .defaultConfig를 사용하거나 주석 proxy.istio .io/config를 사용하여 워크로드 단위로 더 많은 메쉬 전체를 보고하도록 프록시를 구성할 수 있습니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380e49967c479a3974199&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;By default, Istio configures the proxies to expose only a limited set of statistics. You can configure the proxies to report more mesh-wide using the meshConfig .defaultConfig or on a per-workload basis using the annotation proxy.istio .io/config.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e6b8b2c1c23809f816ccf09d65bcac3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨트롤 플레인에는 성능에 대한 지표도 표시됩니다. 가장 중요한 것은 프록시에 변경 사항을 배포하는 데 걸리는 시간을 측정하는 히스토그램 파일럿_proxy_convergence_time입니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238073aebad58dee15296f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The control plane also exposes metrics for its performance. The most important is the histogram pilot_proxy_convergence_time, which measures the time taken to distribute changes to the proxies.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e6b8b2c1c238078877ed4c4691d05e4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;IstioOperator를 사용하여 Istio에서 사용할 수 있는 메트릭을 사용자 지정하고 프록시 구성을 정의하는 주석 proxy.istio.io/config 에서 extraStats 값을 설정하여 서비스에 사용할 수 있습니다. 이러한 수준의 제어는 운영자(최종 사용자)가 스크래핑되는 원격 측정과 대시보드에 표시하는 방법에 대한 유연성을 제공합니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380c19e02ef42ef48f1c3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;We can customize the metrics available in Istio using the IstioOperator and use them in services by setting the extraStats value in the annotation proxy.istio.io/config that defines the proxy configuration. This level of control gives the operator (end user) flexibility over what telemetry gets scraped and how to present it in dashboards.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380408253e436865270f0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;8&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;8&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380d0bb54e175e4878815&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;관찰가능성 Observability : Visualizing network behavior with Grafana, Jaeger, and Kiali&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1e6b8b2c1c238000a7b1e9e3e0c63f9f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://netpple.github.io/docs/istio-in-action/Istio-ch8-observability-2-visibility&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://netpple.github.io/docs/istio-in-action/Istio-ch8-observability-2-visibility&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380138460d36f135579b1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;This chapter covers&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380fba374f13a405c9488&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;그라파나&lt;/span&gt;를 사용해&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 메트릭&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;시각적&lt;/span&gt;으로 관찰하기 Using Grafana to observe metrics visually&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380cb9ee4c778249805db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;예거&lt;/span&gt;를 사용한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;분산 트레이싱&lt;/span&gt; 계측하기 Distributed tracing instrumentation with Jaeger&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238076b0c8d33e82cb0e37&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;키알리&lt;/span&gt;로 네트워크 호출 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;그래프 시각화&lt;/span&gt;하기 Visualizing the network call graph with Kiali&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238024b319f577e53b66d9&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380a8bdb9d57d6aaad326&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 장에서는 앞 장에서 구축한 기반을 바탕으로 몇 가지 도구를 사용해 서비스 메시의 데이터를 시각화해본다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238030a8ade15963c06bc5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 데이터 플레인과 컨트롤 플레인 구성 요소가 아주 유용한 대량의 운영 메트릭을 어떻게 노출하는지, 이를 프로메테우스 같은 시계열 시스템에 어떻게 긁어올 수 있는지 등을 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23806f8858e48924f96647&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지금부터는 그라파나와 키알리 같은 도구를 사용해 이런 메트릭들을 시각화해본다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380e4987bf706f4176197&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 메시 그 자체와 더불어 메시 내 서비스들의 동작을 더 잘 이해하기 위해서다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238041a94be950ab460dce&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 분산 트레이싱 도구를 사용해 네트워크 호출 그래프를 시각화하는 방법도 살펴본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c238099baf7e2444345aa9e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238067a3d6eee2b4ea24cc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380029282ca534d90f879&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8.1 Using Grafana to visualize Istio service and control-plane metrics&lt;/span&gt; 그라파나로 이스티오 서비스와 컨트롤 플레인 메트릭 시각화&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c23809b9936cd53f733afb3&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8.1.1 Setting up Istio&amp;rsquo;s Grafana dashboards&lt;/span&gt; 이스티오의 그라파나 대시보드 설정하기 &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습~)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c238027b6e2c15d1d1946a2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;그파라나 웹 접속&lt;/code&gt; : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;admin / prom-operator&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380598977fad7cfae494d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;perl&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# Grafana 접속 : admin / prom-operator
open http://127.0.0.1:30002
open http://127.0.0.1:30002/dashboards

# 반복 호출 해두기
while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23809abf4bc4d83e1935ad&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380a88e3be3d5dbb8de68&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;책 제공 소스 코드에 대시보드를 추가 설정 or 공개 대시보드에서 검색 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://grafana.com/orgs/istio/dashboards&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://grafana.com/grafana/dashboards/?search=istio&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380549fb5e91c92fc3910&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;subunit&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
cd ch8

kubectl -n prometheus create cm istio-dashboards \
--from-file=pilot-dashboard.json=dashboards/\
pilot-dashboard.json \
--from-file=istio-workload-dashboard.json=dashboards/\
istio-workload-dashboard.json \
--from-file=istio-service-dashboard.json=dashboards/\
istio-service-dashboard.json \
--from-file=istio-performance-dashboard.json=dashboards/\
istio-performance-dashboard.json \
--from-file=istio-mesh-dashboard.json=dashboards/\
istio-mesh-dashboard.json \
--from-file=istio-extension-dashboard.json=dashboards/\
istio-extension-dashboard.json

# 확인
cd ..
kubectl describe cm -n prometheus  istio-dashboards

# Grafana (오퍼레이터)가 configmap(istio-dashboards)을 마운트(인식) 하도록 레이블 지정
kubectl label -n prometheus cm istio-dashboards grafana_dashboard=1

# (참고) Grafana 대시보드 추가
kubectl stern -n prometheus prom-grafana
prom-grafana-759d6cc456-2h7mg grafana-sc-dashboard [2025-05-02 17:37:01] File in configmap controller-manager.json ADDED
prom-grafana-759d6cc456-2h7mg grafana-sc-dashboard [2025-05-02 17:37:01] Working on configmap prometheus/prom-kube-prometheus-stack-persistentvolumesusage
prom-grafana-759d6cc456-2h7mg grafana-sc-dashboard [2025-05-02 17:37:01] File in configmap persistentvolumesusage.json ADDED
prom-grafana-759d6cc456-2h7mg grafana-sc-dashboard [2025-05-02 17:37:01] Working on configmap prometheus/prom-kube-prometheus-stack-k8s-resources-namespace
prom-grafana-759d6cc456-2h7mg grafana-sc-dashboard [2025-05-02 17:37:01] File in configmap k8s-resources-namespace.json ADDED
prom-grafana-759d6cc456-2h7mg grafana-sc-dashboard [2025-05-02 17:48:55] Working on configmap prometheus/istio-dashboards
prom-grafana-759d6cc456-2h7mg grafana-sc-dashboard [2025-05-02 17:48:55] File in configmap istio-extension-dashboard.json ADDED
prom-grafana-759d6cc456-2h7mg grafana-sc-dashboard [2025-05-02 17:48:55] File in configmap istio-mesh-dashboard.json ADDED
prom-grafana-759d6cc456-2h7mg grafana-sc-dashboard [2025-05-02 17:48:55] File in configmap istio-performance-dashboard.json ADDED
prom-grafana-759d6cc456-2h7mg grafana-sc-dashboard [2025-05-02 17:48:55] File in configmap istio-service-dashboard.json ADDED
prom-grafana-759d6cc456-2h7mg grafana-sc-dashboard [2025-05-02 17:48:55] File in configmap istio-workload-dashboard.json ADDED
prom-grafana-759d6cc456-2h7mg grafana-sc-dashboard [2025-05-02 17:48:55] File in configmap pilot-dashboard.json ADDED
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23803d9663c3d8fd18303b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;http://127.0.0.1:30002/dashboards&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/529b9eb5-b134-413d-b259-4da94b8b0860/CleanShot_2025-04-27_at_14.59.43.png?table=block&amp;amp;id=1e6b8b2c-1c23-803d-9663-c3d8fd18303b&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=gSj1nRTf6dxoNvKlwHNAzcqA-rbyXy7RcXDhQihwhcQ&quot; alt=&quot;http://127.0.0.1:30002/dashboards&quot; width=&quot;624&quot; height=&quot;554.7421109902067&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c23807092e4c5486bdd4824&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380368309e7c1c2014048&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8.1.2 Viewing control-plane metrics&lt;/span&gt; 컨트롤 플레인 메트릭 보기&lt;i&gt; &lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&amp;rArr; 상세 메트릭 &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://netpple.github.io/docs/istio-in-action/Istio-ch8-observability-2-visibility#812-%EC%BB%A8%ED%8A%B8%EB%A1%A4-%ED%94%8C%EB%A0%88%EC%9D%B8-%EB%A9%94%ED%8A%B8%EB%A6%AD&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; 참고&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238011b292f99a2dc22967&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그라파나 대시보드 &amp;rarr; Istio &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Control Plane&lt;/span&gt; Dashboard 선택 : 앞 장에서 컨트롤 플레인을 긁어가도록 ServiceMonitor 리소스 설정&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c238020b9cbcc6544bcf6fa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;CPU, 메모리, 고루틴 같은 정보뿐 아니라 컨트롤 플레인 오류, 설정 동기화 문제, 활성 데이터 플레인 커넥션 갯수 등에 대한 데이터도 보인다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380bcafebfc73fc60c02b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림 처럼 그래프 중 하나의 세부 사항을 누르고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Explore&lt;/span&gt; 로 그래프를 만들어내는 데 사용하는 원본 쿼리를 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c23806bb09ff4d0613a79fb&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/23010377-8e22-48ea-9a8a-d43208b63f9b/CleanShot_2025-04-27_at_15.59.51.png?table=block&amp;amp;id=1e6b8b2c-1c23-806b-b09f-f4d0613a79fb&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=_-ygfcuFan7pJMLDG-2XPzGM8fCiuApwaM9O4fzGHkI&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;455.8938053097345&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380e19ff6d83088439b53&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;sum(irate(pilot_xds_pushes{type=&quot;rds&quot;}[1m]))
sum(irate(pilot_xds_pushes{type=&quot;sds&quot;}[1m]))
sum(irate(pilot_xds_pushes{type=&quot;nds&quot;}[1m]))
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c23808799c2e01964c7574d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;해당 쿼리를 프로메테우스에서 확인해보자 : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;pilot_xds_pushes&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://127.0.0.1:30001/graph?g0.expr=pilot_xds_pushes&amp;amp;g0.tab=1&amp;amp;g0.stacked=0&amp;amp;g0.range_input=15m&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380c5876adb2c0966b931&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/7ac66902-6f53-443f-b7bd-0cfe2f33be68/image.png?table=block&amp;amp;id=1e7b8b2c-1c23-80c5-876a-db2c0966b931&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=Pf99YnjoM-owPsmkySGVltIdPhkitVkl5N_Gb1GWjaI&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;494.8418833450457&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380eba2d9de7a7127a6b6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c238064a377c49b67e4a8f0&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8.1.3 Viewing data-plane metrics&lt;/span&gt; 데이터 플레인 메트릭 보기&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &amp;rArr; 상세 메트릭 &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://netpple.github.io/docs/istio-in-action/Istio-ch8-observability-2-visibility#813-%EB%8D%B0%EC%9D%B4%ED%84%B0%ED%94%8C%EB%A0%88%EC%9D%B8-%EB%A9%94%ED%8A%B8%EB%A6%AD&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; 참고&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c238076b3acc125c26ce8fe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그라파나 대시보드 &amp;rarr; Istio &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Service&lt;/span&gt; Dashboard 선택 : webapp.. 등 특정 서비스를 선택 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380f3b151c93dd367f86e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/47007ec1-0baf-4859-b532-4c184c782990/CleanShot_2025-04-27_at_16.04.38.png?table=block&amp;amp;id=1e6b8b2c-1c23-80f3-b151-c93dd367f86e&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=2tM61DBwAEXE4saBbYCSql4Rh5bszcDHxqSsmgbK_Nk&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;339.86125461254613&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380dbaf4bcc39944debd0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e6b8b2c1c2380f2837ec97258531537&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 그래프들은 이스티오 표준 메트릭으로 채워지며, 이를 변경하고 조정하거나 다른 메트릭에 대한 새 그래프를 추가할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e6b8b2c1c23802ca64dd8397285665e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;커스텀 메트릭이나 특정 엔보이 메트릭을 활성화하는 방법은 7장을 참조하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e6b8b2c1c2380b899d8f70165c28496&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380e9a381fa8dd7cb5a77&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c23805b8b5dd4a26aa3456b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8.2 Distributed tracing&lt;/span&gt; 분산 트레이싱&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380d1a8d8df1056f41cc7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;[추천글] &lt;a class=&quot;notion-link notion-page link-mention&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline; transition: background 120ms ease-in; vertical-align: middle; color: inherit; position: relative;&quot; href=&quot;https://www.anyflow.net/sw-engineer/istio-opentelemetry-tracing&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: cover; object-position: center center;&quot; src=&quot;https://oopy.lazyrockets.com/api/rest/cdn/image/b830e74a-b244-46d3-aa23-c5621d539cb6.png?d=16&quot; alt=&quot;Istio Distributed Tracing w/ OpenTelemetry Istio Distributed Tracing w/ OpenTelemetry&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-thickness: 1px; text-decoration-color: #e9e9e7; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Istio Distributed Tracing w/ OpenTelemetry &lt;/span&gt;Istio Distributed Tracing w/ OpenTelemetry&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23802e84fddf12b40769be&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : 분산 트레이싱 필요성&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238089a2caff7170e418e5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;더 많은 애플리케이션을 마이크로서비스로 구축할수록, 그림 8.6처럼 비즈니스 목표를 달성하기 위해 협업하는 분산 구성 요소의 네트워크를 만들어가는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380d59cc6fbe93bcd2915&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청 경로에서 문제가 발생&lt;/span&gt;하기 시작하면, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;무슨 일이 일어나고 있는지 이해&lt;/span&gt;하는 것은 매우 중요하다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380d0b97bf913cc6bffb8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그래야 빠르게 진단하고 고칠 수 있기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380008e4ad78a4c52296d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞 절에서는 이스티오가 애플리케이션 대신에 네트워크 관련 메트릭과 텔레메트리를 수집하는 데 어떻게 도움이 되는지 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23803ebeb1e6dab4d38bb8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 절에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;분산 트레이싱이라는 개념&lt;/span&gt;을 살펴보고, 이 개념이 마이크로서비스 망을 통과할 때 오동작하는 요청을 진단하는 데 어떻게 도움이 되는지 살펴본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23801a9ddae897c8b84064&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/277f9e89-e53b-48f3-81ff-8c3695b15fdc/CleanShot_2025-04-27_at_16.09.42.png?table=block&amp;amp;id=1e7b8b2c-1c23-801a-9dda-e897c8b84064&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=_7hBYOyZo64b7xG5Qsa0LhhsPHtILT_gOmDi_vxoH3I&quot; alt=&quot;image&quot; width=&quot;194.9857940673828&quot; height=&quot;388.9716609857021&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380dbb4fee38286a66034&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380f7ba1bec7e72e53cf6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;모놀리스에서는 무언가 오동작하기 시작하면 친숙한 도구를 사용해 디버깅할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380dbaa54fb52e870f8cb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;런타임 프로파일러, 메모리 분석 도구를 사용해 코드의 어떤 부분이 지연이나 오작동을 유발하는지 찾을 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380049eafc6d362df82bb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;반면 분산 구조로 이뤄진 애플리케이션에서는 같은 일을 하려면 새로운 도구들이 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c238097835cf631b60d0c7e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238020aa87e18f76c17d01&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;분산 트레이싱을 사용하면 요청을 처리하는 데 관여한 분산 시스템의 구성 요소에 대한 통찰력을 얻을 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23807a85efeba2e7dd3981&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;분산 트레이싱은 구글 대퍼 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Google Dapper&lt;/span&gt; 논문 &amp;lsquo;Dapper, a LargeScale Distributed Systems Tracing Insfrastructure (2010)&amp;lsquo;에서 도입한 개념이며 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청에 주석&lt;/span&gt;을 붙이는 작업이 포함된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1e7b8b2c1c2380afb74cfc9fd8a88da0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://research.google/pubs/dapper-a-large-scale-distributed-systems-tracing-infrastructure/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://research.google/pubs/dapper-a-large-scale-distributed-systems-tracing-infrastructure/&lt;/a&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380429dcfe43ddf9aa923&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이때 붙이는 주석은 서비스 간 호출을 나타내는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;상관관계&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;correlation&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ID&lt;/span&gt;와 서비스 간 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;호출 그래프&lt;/span&gt;를 거치는 특정 요청을 나타내는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트레이스&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;trace&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ID&lt;/span&gt; 이다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c238047bcaed3d587d799f4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 데이터 플레인은 요청이 데이터 플레인을 통과할 때 이런 메타데이터를 요청에 추가할 수 있다 (그리고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인식할 수 없거&lt;/span&gt;나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;외부 개체에서 온 메타데이터&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;제거&lt;/span&gt;&lt;/span&gt;한다는 점이 중요하다)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1e7b8b2c1c2380e08c16dec90f4a4731&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;예) istio 의 경우 (Jaeger/Zipkin) ~&amp;nbsp;&lt;/i&gt;&lt;i&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;x-request-id&lt;/code&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p id=&quot;block-1e7b8b2c1c2380cfa2a6f8ee37e24bc2&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;(and, importantly, &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;remove&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; them when they are &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;unrecognized&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; or come from &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;external entities&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e7b8b2c1c23802eb0c1fe644366a9f0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380139410c01697e3a727&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;오픈텔레메트리&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;OpenTelemetry&lt;/span&gt; 는 커뮤니티 주도 프레임워크로, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;오픈트레이싱을 포함&lt;/span&gt;한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380859886c09ddc87ce80&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://opentelemetry.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://opentelemetry.io/&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; OpenTelemetry is a collection of APIs, SDKs, and tools. Use it to &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;instrument&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, generate, &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;collect&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, and &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;export&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;telemetry&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;data&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; (metrics, logs, and traces) to help you analyze your software&amp;rsquo;s performance and behavior.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380c28df9f74e2b8e9156&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;오픈트레이싱&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;OpenTracing&lt;/span&gt; 이란 분산 트레이싱과 관련된 개념 및 API를 정의하는 사양을 말한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380c19874f61d4e97736a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://opentracing.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/3603cd19-e72a-4db8-9a1d-3b17eb16c41a/CleanShot_2025-04-27_at_16.20.28.png?table=block&amp;amp;id=1e7b8b2c-1c23-80c1-9874-f61d4e97736a&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=hi1DV3PIW94XfKMHn_3P52NGlV5wOK8KtgIqSunYtpo&quot; alt=&quot;https://opentracing.io/&quot; width=&quot;432&quot; height=&quot;73.22033898305085&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c238035a047ffb6127d5029&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380038d48ed0e0f81549c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;분산 트레이싱은 &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;어느 정도 개발자에게 의존&lt;/span&gt;&lt;/span&gt;하는데, 코드를 계측하는 작업이나 애플리케이션에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청을 처리하고 다른 시스템으로 새로운 요청을 보낼&lt;/span&gt; 때 &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청에 주석을 붙이는 작업이 필요&lt;/span&gt;&lt;/span&gt;하기 때문이다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380d68d51c512d83b27ea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;모니터링을 위한 코드(instrumenting code) 삽입&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380a49246c7aff59d0893&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;요청에 어노테이션 (correlation id, trace Id 등) 추가&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380618c6bed1f85be7dd9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트레이싱 엔진은 요청 흐름의 전체 상황을 파악하는 데 도움이 되며, 이와 같은 특성은 아키텍처에서 오동작하는 영역을 식별하는 데 유용하다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380de917ad09953b75227&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오를 사용하면, 개발자가 직접 구현해야 하는 부담을 크게 덜어줄 수 있으며 분산 트레이싱을 서비스 메시의 일부로 제공&lt;/span&gt;&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380cd8e5fe2e7fc46d93a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c238074811be5f16f930698&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8.2.1 How does distributed tracing work?*&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt; 분산 트레이싱은 어떻게 작동하는가?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238089a6bfe9038e3da303&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;가장 단순한 형태의 오픈트레이싱을 활용한 분산 트레이싱은 애플리케이션이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스팬&lt;/span&gt;을 생성하고, 이를 오픈트레이싱 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔진과 공유&lt;/span&gt;하며, 뒤이어 호출하는 서비스로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트레이스 콘텍스트&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;전파&lt;/span&gt;하는 것으로 이뤄진다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238002a79ac272f547fc96&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;At its simplest form, distributed tracing with OpenTracing consists of applications creating &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Spans&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;sharing&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; those Spans with an OpenTracing &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;engine&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, and &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;propagating&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; a &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;trace context&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; to any of the services it subsequently calls.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e7b8b2c1c23804e8e14da6856c8e652&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스팬&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;span&lt;/span&gt; 이란 서비스나 구성 요소 내에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;작업 단위&lt;/span&gt;를 나타내는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 모음&lt;/span&gt;을 말한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23807db17ae2e772bd35e2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;A Span is a collection of data representing a unit of work within a service or component.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380ad83bdee2745ca97ef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 데이터에는 작업 시작 시각, 종료 시각, 작업 이름, 태그 및 로그 집합 등이 포함된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23809389b1f3d58a55da23&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238054b820dd99b1133998&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;업스트림 서비스도 동일한 작업을 수행한다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;In turn, those upstream services do the same thing&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380c08d86ffe9f03308f5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청 중 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자신이 처리하는 부분&lt;/span&gt;을 나타내는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 스팬을 만들고&lt;/span&gt;, 이를 오픈트레이싱 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔진에 보내고&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트레이스 콘텍스트를 다른 서비스로 전파&lt;/span&gt;한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380a4b815d6e9efcfffcb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;create a Span capturing its part of the request, send that to the OpenTracing engine, and further propagate the trace context to other services.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380a59aa7c3d9f5f951fc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;분산 트레이싱 엔진은 이런 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스팬&lt;/span&gt;과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트레이스 콘텍스&lt;/span&gt;트를 사용해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트레이스&lt;/span&gt;를 구축할 수 있다. &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;(Span 과 Trace context &amp;rArr; Trace)&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380239fc2f18680a13e58&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Using these Spans and the trace context, the distributed-tracing engine can construct a Trace.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e7b8b2c1c238046b4efd1889d1b513f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서 트레이스란 서비스 간의 인과 관계를 말하며 방향, 타이밍과 기타 디버깅 정보를 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380cc85edd9c9bda8dede&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;스팬에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스팬 ID&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트레이스 ID&lt;/span&gt;가 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380c090bbce5ac7d0b572&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런한 ID들은 서비스 간의 작업 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;상관관계를 파악&lt;/span&gt;하는 데 사용되며&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 서비스 간에 전파&lt;/span&gt;돼야 한다. 그림 8.7은 이를 설명해준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23804da7f9fbd11d436b8e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/6f20109f-823f-4fcd-87c5-8bc74c32a87b/CleanShot_2025-04-27_at_16.32.17.png?table=block&amp;amp;id=1e7b8b2c-1c23-804d-a7f9-fbd11d436b8e&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=ApYObSLp0GuLSKByCdmaU-WFsi87xPdIuhU6L-EZhzc&quot; alt=&quot;image&quot; width=&quot;1248&quot; height=&quot;502.97661623108667&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23807ca46dc3c4d98c9c1f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;분산 트레이싱을 사용하면, 네트워크 홉마다 스팬을 수집하고 이를 종합적인 트레이스에 담아 호출 그래프 내의 문제를 디버깅하는 데 사용할 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380c4bfe2f92ab785e4ac&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23807f926bd3cc780c746d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;오픈트레이싱 구현체&lt;/span&gt;에는 다음과 같은 시스템들이 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380c5b689d8297f26c1a1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예거 Jaeger&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380c2b822f40a833a69ee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;집킨 Zipkin&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c238024bf47fde2ba446f97&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;라이트스텝 Lightstep&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23806d8d18f1c8ec82e169&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인스타나 Instana&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380fb8bc7e1b24e543103&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23800e9ec1cec586df82d3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;이스티오는 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스팬을 분산 트레이싱 엔진으로 보낼 수&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt; 있으므로, 이 작업을 위해 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;언어 전용 라이브러리나 애플리케이션 전용 설정이 필요 없&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380f38323cf208514d181&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청이 이스티오 서비스 프록시를 통과할 때, 이미 진행 중인 트레이스가 없다면 트레이스를 새로 시작하고 요청의 시작 및 종료 시각을 스팬의 일부로 기록한다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380faad62de4589f2e222&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 후속 스팬을 전체 트레이스에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;연관 짓는데 사용&lt;/span&gt;할 수 있도록, 보통 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;집킨 트레이싱 헤더&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Zipkin tracing header&lt;/span&gt; 라고 하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP 헤더&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청에 덧붙&lt;/span&gt;인다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380259212c009bf9bc675&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;appends&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; HTTP headers, commonly known as the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Zipkin tracing headers&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, to the &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;request&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; that can be used to &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;correlate&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; subsequent &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Span&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; objects to the overall &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Trace&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380b19731f42544b30500&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청이 서비스로 들어왔을 때 이스티오 프록시가 분산 트레이싱 헤더를 인식하면 프록시는 트레이스가 진행 중인 것으로 취급해 트레이스를 새로 만들지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380679a40cdc638e8cbbf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오와 분산 트레이싱 기능에서 사용하는 집킨 트레이싱 헤더는 다음과 같다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238098b23be634b7d7fc70&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;x-request-id&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380bb86f1e35d1b039001&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-traceid&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c238023a429fa420c916764&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-spanid&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c238057912dcd7809c68ab4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-parentspanid&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380a881d9feda5f978b84&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-sampled&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23804f8061d5955bd6d3d4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-flags&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380928740d31ffa239153&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-ot-span-context&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23804b9373c32d87948cdc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238011a139f13edfec3de7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 제공하는 분산 트레이싱 기능이 요청 호출 그래프 전체에 걸쳐 작동하려면, 각 &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션이 이 헤더들이 자신이 하는 모든 호출에 전파&lt;/span&gt;&lt;/span&gt;해야 한다. (그림 8.8 참고)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23809b87a1e35100ab47d0&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/9fc835b0-7298-4535-abb7-191c9fdf5e77/CleanShot_2025-04-27_at_16.38.49.png?table=block&amp;amp;id=1e7b8b2c-1c23-809b-87a1-e35100ab47d0&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=owIQlK-JdfErXYKZ04Dy5pnLbkxq2thV3WqTRWwBrK4&quot; alt=&quot;애플리케이션은 반드시 트레이싱 헤더를 전파해야 한다. 그렇지 않으면 요청의 스팬 전부가 손실된다.&quot; width=&quot;864&quot; height=&quot;482.2574257425743&quot; /&gt;애플리케이션은 반드시 트레이싱 헤더를 전파해야 한다. 그렇지 않으면 요청의 스팬 전부가 손실된다.&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380eaa47ee4a559da467b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;요청이 들어온다.&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23804b8c2ee1afb68490fa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;오! 트레이싱 헤더가 없는 것을 보니 새로운 요청이다.&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23805f9c08f35544fa05de&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;요청이 서비스 사이를 오가는 과정을 추적할 수 있도록 트레이스 헤더를 생성해두자&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380fc929ec453d1763f5c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;트레이스 헤더가 요청 헤더에 추가됐다. &lt;/i&gt;&lt;i&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;x-request-id: c9421&amp;hellip;&lt;/code&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23808896ffc424e69c4aeb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;애플리케이션이 다른 서비스를 호출할 때 트레이스 헤더를 전파해야 한다.&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380b2bd22c38e95cacc39&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;트레이스 헤더를 전파한다. &lt;/i&gt;&lt;i&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;x-request-id: c9421&amp;hellip;&lt;/code&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380cca4e2df59a76d4b8d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;이스티오 프록시는 기존 트레이스 헤더를 애플리케이션으로 전파한다.&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380d79a64e1413613e837&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;만약 애플리케이션이 요청 헤더를 전파하지 않으면&amp;hellip;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380b58e5cd85f135d0d92&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;요청에 트레이스 헤더가 누락된다. 앱이 전파하지 않았기 때문이다.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380f3a8fdf0479082ed99&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380ceb9e7ee6f603c7167&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 어떤 호출이 어떤 수신 요청의 결과물인지 모르기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380a19443c14bba0c01ac&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;업스트림 호출과 서비스로 들어온 호출을 올바르게 연결하려면, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션이 반드시 이런 헤더를 전파하는 역할&lt;/span&gt;을 맡아야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c238045bab1d268a624b309&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;대부분의 경우 기본 RPC 프레임워크는 오픈트레이싱과 통합되거나 오픈트레이싱을 직접 지원해 이런 헤더를 자동으로 전파해준다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380d4aed0c30ea8f31679&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어느 방식이든 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션은 이런 헤더가 전파됨을 보장&lt;/span&gt;해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380f6bf56e04628e1fcd2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380299838dd8c5117beca&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8.2.2 Installing a distributed tracing system&lt;/span&gt; 분산 트레이싱 시스템 설치하기 &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습~)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380e2afa8ec644cffd59e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예거 설치는 복잡하여 데이터베이스가 필요하다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23804aa8dbc9301d9967e9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 이유로 이 책에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;예거의 일체형&lt;/span&gt; all-in-one &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;배포 샘플&lt;/span&gt;을 그대로 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23804780c9f4ed23085e6b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 샘플은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;zipkin 쿠버네티스 서비스&lt;/span&gt;도 만드는데, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오가 기대하는 기본 설정&lt;/span&gt;에 맞춰 만들어지는 덕분에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;바로 연결&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23801097fefc97e0c87361&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;분산 트레이싱 기능 커스터마이징에 대한 자세한 설명은 8.2.5절을 참조한다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23800a8fcbd793c3b07a74&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 완전한 운영 환경 배포 단계는 예거 문서를 참조하자. &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.jaegertracing.io/docs/1.22/operator/#production-strategy&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.jaegertracing.io/docs/1.22/operator/#production-strategy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23800ea6a9ce1748ad95c2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238006a2c6ca45c8b6ee48&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 sample 디렉터리에서 예거 일체형 배포를 설치해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23805d9e18f6843ac54e6f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# myk8s-control-plane 진입 후 설치 진행
docker exec -it myk8s-control-plane bash
-----------------------------------
# 설치 파일 확인
pwd
ls istio-$ISTIOV/samples/addons
cat istio-$ISTIOV/samples/addons/jaeger.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jaeger
  namespace: istio-system
  labels:
    app: jaeger
spec:
  selector:
    matchLabels:
      app: jaeger
  template:
    metadata:
      labels:
        app: jaeger
        sidecar.istio.io/inject: &quot;false&quot;
      annotations:
        prometheus.io/scrape: &quot;true&quot;
        prometheus.io/port: &quot;14269&quot;
    spec:
      containers:
        - name: jaeger
          image: &quot;docker.io/jaegertracing/all-in-one:1.35&quot;
          env:
            - name: BADGER_EPHEMERAL
              value: &quot;false&quot;
            - name: SPAN_STORAGE_TYPE
              value: &quot;badger&quot;
            - name: BADGER_DIRECTORY_VALUE
              value: &quot;/badger/data&quot;
            - name: BADGER_DIRECTORY_KEY
              value: &quot;/badger/key&quot;
            - name: COLLECTOR_ZIPKIN_HOST_PORT
              value: &quot;:9411&quot;
            - name: MEMORY_MAX_TRACES
              value: &quot;50000&quot;
            - name: QUERY_BASE_PATH
              value: /jaeger
          livenessProbe:
            httpGet:
              path: /
              port: 14269
          readinessProbe:
            httpGet:
              path: /
              port: 14269
          volumeMounts:
            - name: data
              mountPath: /badger
          resources:
            requests:
              cpu: 10m
      volumes:
        - name: data
          emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
  name: tracing
  namespace: istio-system
  labels:
    app: jaeger
spec:
  type: ClusterIP
  ports:
    - name: http-query
      port: 80
      protocol: TCP
      targetPort: 16686
    # Note: Change port name if you add '--query.grpc.tls.enabled=true'
    - name: grpc-query
      port: 16685
      protocol: TCP
      targetPort: 16685
  selector:
    app: jaeger
---
# Jaeger implements the Zipkin API. To support swapping out the tracing backend, we use a Service named Zipkin.
apiVersion: v1
kind: Service
metadata:
  labels:
    name: zipkin
  name: zipkin
  namespace: istio-system
spec:
  ports:
    - port: 9411
      targetPort: 9411
      name: http-query
  selector:
    app: jaeger
---
apiVersion: v1
kind: Service
metadata:
  name: jaeger-collector
  namespace: istio-system
  labels:
    app: jaeger
spec:
  type: ClusterIP
  ports:
  - name: jaeger-collector-http
    port: 14268
    targetPort: 14268
    protocol: TCP
  - name: jaeger-collector-grpc
    port: 14250
    targetPort: 14250
    protocol: TCP
  - port: 9411
    targetPort: 9411
    name: http-zipkin
  selector:
    app: jaeger
    
# 설치
kubectl apply -f istio-$ISTIOV/samples/addons/jaeger.yaml
deployment.apps/jaeger created
service/tracing created
service/zipkin created
service/jaeger-collector created

# 빠져나오기
exit
-----------------------------------

# 설치 확인 : 예거는 집킨 형식과 호환됨 Jaeger is compatible with the Zipkin format.
# https://www.jaegertracing.io/docs/1.22/features/#backwards-compatibility-with-zipkin
kubectl get deploy,pod,svc,ep -n istio-system

# NodePort 변경 및 nodeport tracing(30004) 변경
kubectl describe svc -n istio-system tracing
...
Port:                     http-query  80/TCP
TargetPort:               16686/TCP
NodePort:                 http-query  31345/TCP
Endpoints:                10.10.0.20:16686
...

kubectl patch svc -n istio-system tracing -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 16686, &quot;nodePort&quot;: 30004}]}}'

# tracing 접속 : 예거 트레이싱 대시보드
open http://127.0.0.1:30004
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380a78be8f79501127946&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380308490ff8ffe9b4cbb&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8.2.3 Configuring Istio to perform distributed tracing&lt;/span&gt; 분산 트레이싱을 수행하도록 이스티오 설정하기&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23807e83c8cd20b40393c7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오에서 분산 트레이싱은 메시 전체, 네임스페이스, 특정 워크로드 수준으로 설정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380dcaa54f580513a044e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 장에서는 전체 및 워크로드 트레이싱 설정을 다룬다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380df8180e8728e77e845&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 995.016px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1e7b8b2c1c2380d8aa9afe28a1a57203&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이스티오 1.12는 &amp;lsquo;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;로깅, 메트릭, 트레이싱&lt;/span&gt;&amp;rsquo;에 좀 더 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;세분화된 API&lt;/span&gt;인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;텔레메트리 Telemetry&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;API&lt;/span&gt;를 도입했다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380b29c77fb1cadc70bbd&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c23803e8cabeadaf246c9c6&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;설치 전 트레이싱 설정하기&lt;/u&gt;&lt;/span&gt; : 방법 1 사용&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23809a9408dc622c6b1be7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 집킨, 데이터독, 예거(집킨 호환)등 분산 트레이싱 백엔드를 지원한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380169752dfd31487045d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Istio supports distributed tracing &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;backends&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; including &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Zipkin&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Datadog&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;, &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Jaeger&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; (Zipkin compatible), and others.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23808fb51fe209fda5675c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23802db99bf1821a92d187&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;방법 1&lt;/span&gt; : 다음은 이스티오를 설치할 때 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IstioOperator&lt;/span&gt; 리소스를 사용하는 샘플 설정으로, 다양한 분산 트레이싱 백엔드를 설정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380459046e5dbbaf0a0b7&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  namespace: istio-system
spec:
  meshConfig:
    defaultConfig:
      tracing:
        lightstep: {}
        zipkin: {}
        datadog: {}
        stackdriver: {}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380598ba3fb6eac94f29f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 집킨 호환형인 예거를 사용하려면 다음과 같이 설정한다. &amp;rarr; 현재 실습 설정&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380cfa46eefc882ae3ce4&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
cat ch8/install-istio-tracing-zipkin.yaml
---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  namespace: istio-system
spec:
  meshConfig:
    defaultConfig:
      tracing:
        sampling: 100
        zipkin:
          address: zipkin.istio-system:9411

# 기존 설정 확인
kubectl get IstioOperator -n istio-system installed-state -o json        
kubectl describe cm -n istio-system istio
...
defaultConfig:
  discoveryAddress: istiod.istio-system.svc:15012
  proxyMetadata: {}
  tracing:
    zipkin:
      address: zipkin.istio-system:9411
...

# 적용
docker exec -it myk8s-control-plane bash
-----------------------------------
# 
cat &amp;lt;&amp;lt; EOF &amp;gt; install-istio-tracing-zipkin.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  namespace: istio-system
spec:
  meshConfig:
    defaultConfig:
      tracing:
        sampling: 100 # Sampling rate: 100% (all requests are traced).
        zipkin:
	        # indicating that Envoy sends spans to a Zipkin-compatible service (in this case, Jaeger, which accepts Zipkin&amp;rsquo;s protocol).
	        # 즉, envoy가 span을 보내는 destination jaeger 주소
          address: zipkin.istio-system:9411
EOF

istioctl install -y -f install-istio-tracing-zipkin.yaml

exit
-----------------------------------

# 확인
kubectl describe cm -n istio-system istio
...
  tracing:
    sampling: 100
    zipkin:
      address: zipkin.istio-system:9411
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c23802b839ac56188053d63&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23804f8378f221cd5e6528&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;방법 2&lt;/span&gt; : istio configmap 설정 - MeshConfig 를 이용한 트레이싱 설정&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt; &amp;rArr; 실습은 Skip&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380549747e60f136d2ca1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 
kubectl edit cm -n istio-system istio
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380d5929ac3f763ad92e7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메시 범위의 기본 설정은 어떤 것이라도 defaultConfig.tracing 부분에서 업데이트 할 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380dd9292fc9f8e68b763&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380c08664d22384820517&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;방법 3&lt;/span&gt; : 워크로드별로 트레이싱 설정하기 : 파드 Spec에 애노테이션 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c238082bc6de87d4b341fe3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 
apiVersion: apps/v1
kind: Deployment
...
spec:
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |
          tracing:
            zipkin:
              address: zipkin.istio-system:9411
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c23800d94eef52ad2379a8d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c23808aa19cc3dabe8b1eb2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c23809e9809fa9e12f24515&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;기본 트레이싱 헤더 살펴보기&lt;/u&gt;&lt;/span&gt; : 헤더와 ID 자동 주입 확인&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23802fa70ee3ba63940bb3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 시점에서 트레이스를 올바를 위치에 보내도록 분산 트레이싱 엔진과 이스티오를 설정했다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380b6a25cfe1f7a80c17b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 생성하는 트레이싱용 집킨 헤더가 우리가 예상하는 대로인지 확인하기 위해 몇 가지 테스트를 해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380c2b280d83bf3a0bf12&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238097b267c3410d69334d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오&lt;/span&gt;가 오픈트레이싱 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;헤더&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;상관관계 ID&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자동&lt;/span&gt;으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;주입&lt;/span&gt;한다는 것을 보여주고자 이스티오 인그레스 게이트웨이를 사용해 외부 httpbin 서비스를 호출하고 요청 헤더를 표시하는 엔드포인트를 호출할 것이다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380f796cdcce66da77406&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습에서는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;httpbin.istioinaction.io&lt;/code&gt; 요청 시 외부 서비스 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://httpbin.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;http://httpbin.org&lt;/a&gt; 를 호출.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c238009b993caf010030b06&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://httpbin.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;http://httpbin.org&lt;/a&gt;&amp;nbsp;은 simple HTTP 테스트 서비스로 응답 시 헤더 정보를 출력.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380ea8dc9f328d4f7a365&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23804aba5de7ff3d9e9bf0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이렇게 라우팅하는 이스티오 Gateway, VirtualService 리소스를 배포해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380df9639e6f7e0ad86e1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
cat ch8/tracing/thin-httpbin-virtualservice.yaml
---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: coolstore-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - &quot;webapp.istioinaction.io&quot;
    - &quot;httpbin.istioinaction.io&quot;
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: thin-httbin-virtualservice
spec:
  hosts:
  - &quot;httpbin.istioinaction.io&quot;
  gateways:
  - coolstore-gateway
  http:
  - route:
    - destination:
        host: httpbin.org
---        
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-httpbin-org
spec:
  hosts:
  - httpbin.org 
  ports:
  - number: 80
    name: http
    protocol: HTTP
  location: MESH_EXTERNAL
  resolution: DNS

#
kubectl apply -n istioinaction -f ch8/tracing/thin-httpbin-virtualservice.yaml

# 확인
kubectl get gw,vs,serviceentry -n istioinaction

NAME                                            AGE
gateway.networking.istio.io/coolstore-gateway   43h

NAME                                                            GATEWAYS                HOSTS                          AGE
virtualservice.networking.istio.io/thin-httbin-virtualservice   [&quot;coolstore-gateway&quot;]   [&quot;httpbin.istioinaction.io&quot;]   5s
virtualservice.networking.istio.io/webapp-virtualservice        [&quot;coolstore-gateway&quot;]   [&quot;webapp.istioinaction.io&quot;]    43h

NAME                                                    HOSTS             LOCATION        RESOLUTION   AGE
serviceentry.networking.istio.io/external-httpbin-org   [&quot;httpbin.org&quot;]   MESH_EXTERNAL   DNS          5s

# 도메인 질의를 위한 임시 설정 : 실습 완료 후에는 삭제 해둘 것
echo &quot;127.0.0.1       httpbin.istioinaction.io&quot; | sudo tee -a /etc/hosts
cat /etc/hosts | tail -n 5
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380b9a8b7df4971eebdc5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238055b1a0f6597b53d60f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;호스트에서 호출 시, 어떻게 외부 서비스로 전달되는지 살펴보자. 원래 요청에서 사용된 헤더를 반환해야 한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238008b522e74be0fcdada&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;client (curl) &amp;rarr; istio-ingress-gateway &amp;rarr; httpbin.org (외부)&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23808eb593dbeb695a4232&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;gcode&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
curl -s http://httpbin.istioinaction.io:30000/headers | jq
{
  &quot;headers&quot;: {
    &quot;Accept&quot;: &quot;*/*&quot;,
    &quot;Host&quot;: &quot;httpbin.istioinaction.io&quot;,
    &quot;User-Agent&quot;: &quot;curl/8.7.1&quot;,
    &quot;X-Amzn-Trace-Id&quot;: &quot;Root=1-68159f8b-23953e0a6fcf040f02442fc4&quot;,
    &quot;X-B3-Sampled&quot;: &quot;1&quot;,
    &quot;X-B3-Spanid&quot;: &quot;92de39f13a4b2ec4&quot;,
    &quot;X-B3-Traceid&quot;: &quot;b443ac2228a6c7b192de39f13a4b2ec4&quot;,
    &quot;X-Envoy-Attempt-Count&quot;: &quot;1&quot;,
    &quot;X-Envoy-Decorator-Operation&quot;: &quot;httpbin.org:80/*&quot;,
    &quot;X-Envoy-Internal&quot;: &quot;true&quot;,
    &quot;X-Envoy-Peer-Metadata&quot;: &quot;ChQKDkFQUF9DT05UQUlORVJTEgIaAAoaCgpDTFVTVEVSX0lEEgwaCkt1YmVybmV0ZXMKHAoMSU5TVEFOQ0VfSVBTEgwaCjEwLjEwLjAuMzAKGQoNSVNUSU9fVkVSU0lPThIIGgYxLjE3LjgKnAMKBkxBQkVMUxKRAyqOAwodCgNhcHASFhoUaXN0aW8taW5ncmVzc2dhdGV3YXkKEwoFY2hhcnQSChoIZ2F0ZXdheXMKFAoIaGVyaXRhZ2USCBoGVGlsbGVyCjYKKWluc3RhbGwub3BlcmF0b3IuaXN0aW8uaW8vb3duaW5nLXJlc291cmNlEgkaB3Vua25vd24KGQoFaXN0aW8SEBoOaW5ncmVzc2dhdGV3YXkKGQoMaXN0aW8uaW8vcmV2EgkaB2RlZmF1bHQKMAobb3BlcmF0b3IuaXN0aW8uaW8vY29tcG9uZW50EhEaD0luZ3Jlc3NHYXRld2F5cwoSCgdyZWxlYXNlEgcaBWlzdGlvCjkKH3NlcnZpY2UuaXN0aW8uaW8vY2Fub25pY2FsLW5hbWUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXkKLwojc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtcmV2aXNpb24SCBoGbGF0ZXN0CiIKF3NpZGVjYXIuaXN0aW8uaW8vaW5qZWN0EgcaBWZhbHNlChoKB01FU0hfSUQSDxoNY2x1c3Rlci5sb2NhbAovCgROQU1FEicaJWlzdGlvLWluZ3Jlc3NnYXRld2F5LTY2Y2M4NDc5ODktOWg4bmsKGwoJTkFNRVNQQUNFEg4aDGlzdGlvLXN5c3RlbQpdCgVPV05FUhJUGlJrdWJlcm5ldGVzOi8vYXBpcy9hcHBzL3YxL25hbWVzcGFjZXMvaXN0aW8tc3lzdGVtL2RlcGxveW1lbnRzL2lzdGlvLWluZ3Jlc3NnYXRld2F5ChcKEVBMQVRGT1JNX01FVEFEQVRBEgIqAAonCg1XT1JLTE9BRF9OQU1FEhYaFGlzdGlvLWluZ3Jlc3NnYXRld2F5&quot;,
    &quot;X-Envoy-Peer-Metadata-Id&quot;: &quot;router~10.10.0.30~istio-ingressgateway-66cc847989-9h8nk.istio-system~istio-system.svc.cluster.local&quot;
  }
}

# (참고) X-Envoy-Peer-Metadata 정보 디코딩 확인
echo &quot;ChQKDkFQUF9DT05UQUlORVJTEgIaAAoaCgpDTFVTVEVSX0lEEgwaCkt1YmVybmV0ZXMKHAoMSU5TVEFOQ0VfSVBTEgwaCjEwLjEwLjAuMzAKGQoNSVNUSU9fVkVSU0lPThIIGgYxLjE3LjgKnAMKBkxBQkVMUxKRAyqOAwodCgNhcHASFhoUaXN0aW8taW5ncmVzc2dhdGV3YXkKEwoFY2hhcnQSChoIZ2F0ZXdheXMKFAoIaGVyaXRhZ2USCBoGVGlsbGVyCjYKKWluc3RhbGwub3BlcmF0b3IuaXN0aW8uaW8vb3duaW5nLXJlc291cmNlEgkaB3Vua25vd24KGQoFaXN0aW8SEBoOaW5ncmVzc2dhdGV3YXkKGQoMaXN0aW8uaW8vcmV2EgkaB2RlZmF1bHQKMAobb3BlcmF0b3IuaXN0aW8uaW8vY29tcG9uZW50EhEaD0luZ3Jlc3NHYXRld2F5cwoSCgdyZWxlYXNlEgcaBWlzdGlvCjkKH3NlcnZpY2UuaXN0aW8uaW8vY2Fub25pY2FsLW5hbWUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXkKLwojc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtcmV2aXNpb24SCBoGbGF0ZXN0CiIKF3NpZGVjYXIuaXN0aW8uaW8vaW5qZWN0EgcaBWZhbHNlChoKB01FU0hfSUQSDxoNY2x1c3Rlci5sb2NhbAovCgROQU1FEicaJWlzdGlvLWluZ3Jlc3NnYXRld2F5LTY2Y2M4NDc5ODktOWg4bmsKGwoJTkFNRVNQQUNFEg4aDGlzdGlvLXN5c3RlbQpdCgVPV05FUhJUGlJrdWJlcm5ldGVzOi8vYXBpcy9hcHBzL3YxL25hbWVzcGFjZXMvaXN0aW8tc3lzdGVtL2RlcGxveW1lbnRzL2lzdGlvLWluZ3Jlc3NnYXRld2F5ChcKEVBMQVRGT1JNX01FVEFEQVRBEgIqAAonCg1XT1JLTE9BRF9OQU1FEhYaFGlzdGlvLWluZ3Jlc3NnYXRld2F5=&quot; | base64 -d

APP_CONTAINERS


CLUSTER_ID

Kubernetes


INSTANCE_IPS

10.10.0.30

ISTIO_VERSIO1.17.8
�
LABELS�*�

appistio-ingressgateway
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23800898a4ca9a395f9395&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 인그레스 게이트웨이를 호출했을 때 간단한 HTTP 테스트 서비스인 외부 URL(httpbin.org)로 라우팅됐다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380c492c1c0b94dbcec0d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 서비스의&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; /headers 엔드포인트로 GET 요청을 하면 요청에 사용한 요청 헤더를 반환&lt;/span&gt;하여, &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;x-b3-*&lt;/code&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;집킨 헤더&lt;/span&gt;가 &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청에 자동으로 붙었음&lt;/span&gt;&lt;/span&gt;을 분명히 알 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380f39f94fcdb58f2c9c1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;집킨 헤더&lt;/span&gt;들은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스팬을 만드는 데 쓰이며 예거로 보내진&lt;/span&gt;다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c23803ca8bed1bd3dfcaa99&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉, 위의 zipkin header들을 통해서 span을 만들고 해당 span 정보들이 trace를 위해서 jaeger로 보내진다. 그렇게 보내진 span 정보들을 아래와 같이 jaeger ui에서 확인 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380a08d1ccae4fe2083a4&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/1ca22b4f-68e8-44c8-9da1-4763870ca63b/image.png?table=block&amp;amp;id=1e8b8b2c-1c23-80a0-8d1c-cae4fe2083a4&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=iDgF8vY1Mfg4ZeYLjvsgiuekWdW6F0vv4RltDGt584Q&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;497.61290322580646&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380839617c7003f7bc7ed&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380b780c4e33e9d77d723&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;8.2.4. Istio가 Zipkin 헤더를 추가하고 Jaeger로 데이터를 전송하는 흐름&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e8b8b2c1c2380b59aa7e85812a0aa93&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Istio는 Envoy proxy(sidecar)를 사용하여 트레이싱을 처리합니다. Envoy sidecar는 트래픽을 가로채고 trace spans를 생성하며, Zipkin의 B3 headers를 추가합니다. 이 spans는 설정된 tracing backend(Zipkin 또는 Zipkin 프로토콜을 지원하는 Jaeger)로 전송됩니다. 애플리케이션은 spans가 하나의 trace로 연결되도록 특정 headers를 전파(propagate)해야 합니다.&lt;/p&gt;
&lt;p id=&quot;block-1e8b8b2c1c2380b6b32fc95716cda263&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;위의 istio에서 설정한(IstioOperator에 직접 설정함) 내용은 아래와 같다.&lt;/p&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380c1bebfd4ad897f2183&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vim&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt; kubectl describe cm -n istio-system istio
...
  tracing:
    sampling: 100
    zipkin:
      address: zipkin.istio-system:9411
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c238006a82af011e0ebafa8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Sampling rate&lt;/span&gt;: 100% (모든 요청이 추적됨).&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380a8841ae8742075f0de&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Zipkin address&lt;/span&gt;: zipkin.istio-system:9411, Envoy가 spans를 Zipkin-compatible service(Jaeger)로 전송함을 나타냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c23808e8a6cd80e7d12f3c6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e8b8b2c1c23806a9f1dc35d5021e166&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8.2.4.1. Istio가 Zipkin 헤더를 추가하고 Jaeger로 전송하는 단계별 흐름&lt;/span&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380209215f8e3292db7fe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio Ingress Gateway로 들어오는 요청&lt;/span&gt;:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380889b87e4da9fca6b2d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클라이언트가 HTTP 요청을 Istio Ingress Gateway로 보냅니다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380a6b1b2f5d59bb1dd16&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Ingress Gateway의 Envoy proxy는 기존 tracing headers(x-b3-traceid, x-b3-spanid 등)를 확인합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380d28e5ac4a2a0e77e82&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;헤더가 없으면 Envoy가 새 헤더를 생성합니다:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380f7a9cfd8dcadd85de7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-request-id: 요청에 대한 고유 ID.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380b38006e70fded493a2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-traceid: 전체 trace를 위한 64-bit ID.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c238006b3e6f72347c9ceae&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-spanid: 현재 span의 고유 ID.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380f480fce5bbaccdae45&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-parentspanid: 부모 span의 ID(필요 시).&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c23804d921bf720a86939b4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-sampled: trace가 샘플링되는지 여부(100% 샘플링 설정에 따라 1로 설정).&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380ef89efefe81ab39038&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-flags: 디버깅 플래그(선택 사항).&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380d78bccdf37476f3a4f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-ot-span-context: OpenTracing context(선택 사항).&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380cfb588f8e60c94e954&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Envoy는 Ingress Gateway용 초기 span을 생성하고, 헤더를 포함하여 요청을 대상 서비스로 전달합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380b4afb6f5ff980bced2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380c281b0ec753e70b9d7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청이 애플리케이션 Pod(Service A)에 도달&lt;/span&gt;:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23801596affd57af67e6fd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청이 첫 번째 애플리케이션 pod(Service A)의 Envoy sidecar에 도착합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c23804db4bbc272048d48f1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Sidecar는 수신 요청을 처리하고 tracing headers를 읽어 Ingress Gateway의 span의 자식인 새 span을 생성합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380deb8f0e5bcd708adfe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Envoy는 헤더를 애플리케이션 컨테이너로 전달합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c238063a073d0ab428a4279&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션은 나가는 요청에 헤더(x-b3-traceid, x-b3-spanid, x-request-id 등)를 전파(propagate)해야 합니다. 이는 다음 방법으로 수행됩니다:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23808ca41df6c7480ad726&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Manual: 애플리케이션 코드에서 헤더를 복사.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c23802ebfb8d568748a7ab6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라이언트 라이브러리 사용&lt;/span&gt;: OpenTelemetry, Zipkin, Jaeger 같은 라이브러리가 헤더 전파를 자동화합니다(예: OpenTelemetry의 propagator 사용).&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c23801490d8fcd5a9f699a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;위의 webapp &amp;rarr; catalog 호출에서는 propagate가 적용되어 있다는것을 알 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380c28f45d8a6f660efde&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Service A가 다른 서비스(Service B)를 호출하면, 나가는 HTTP 요청에 tracing headers를 포함합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e8b8b2c1c23802bac82e94475da390e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380f18619e8b23bf8ac74&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다른 서비스(Service B)로 나가는 요청&lt;/span&gt;:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380c08ecef661d499af84&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Service A의 나가는 요청은 Envoy sidecar를 거칩니다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380a98b83f494bd99bafe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Envoy는 전파된 헤더를 사용하여 나가는 요청에 대한 새 span을 생성합니다(동일한 x-b3-traceid 사용, 새로운 x-b3-spanid).&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c23803b9acfc60bd1018252&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청은 Service B의 Envoy sidecar로 전송되며, 이는 수신 요청을 처리하고 새 span을 생성하여 헤더를 Service B 애플리케이션으로 전달합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e8b8b2c1c238057852be2252a710a16&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380899e6eec66bf332233&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Span 수집 및 Jaeger로 전송&lt;/span&gt;:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23806689bfe887ef62f15d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;각 Envoy proxy(Ingress Gateway, Service A sidecar, Service B sidecar)는 생성한 spans를 설정된 Zipkin 주소(zipkin.istio-system:9411)로 비동기적으로 전송합니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380f49adde03b1b0de718&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;These spans are sent &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;directly&lt;/span&gt; to the configured tracing backend (zipkin.istio-system:9411, which is Jaeger&amp;rsquo;s Zipkin-compatible endpoint) via the Zipkin protocol.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c238005a57ad57b01eaad56&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;The spans are sent &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;asynchronously&lt;/span&gt; by each Envoy proxy, independent of other proxies or application logic.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380fb8856e0562555e24b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;The Jaeger collector aggregates these spans, correlates them using the x-b3-traceid, and stores them for visualization in the Jaeger UI.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380f9b951c2da22a71f68&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 설정에서는 주소가 Zipkin 프로토콜을 수용하는 Jaeger collector 서비스를 가리킵니다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380a59c61c5f8e18d7ff9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Jaeger collector는 spans를 수신하여 backend(Cassandra 또는 Elasticsearch)에 저장하고 Jaeger UI를 통해 조회할 수 있도록 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e8b8b2c1c238057a51be3fe9d925a9e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380c79a18f19067981b25&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Jaeger에서 시각화&lt;/span&gt;:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380149cdbde9ae7bdcaa7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Jaeger UI는 x-b3-traceid를 사용하여 spans를 연관시켜 완전한 trace를 구성합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c23805d9508da68df54c512&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Each span is displayed with metadata like service name, duration, and timestamps, showing the request&amp;rsquo;s journey through the Ingress Gateway, Service A, Service B, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380a9a8a4d2bf7b994afc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380a7b5b0e901e7ab880d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Text 기반 diagram&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e8b8b2c1c23802d8badf66f2387887a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;coq&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;[Client] ---- HTTP Request ----&amp;gt; [Istio Ingress Gateway]
                                    |
                                    | Envoy Proxy:
                                    | - Generates x-b3-traceid, x-b3-spanid, x-request-id, etc.
                                    | - Creates Span A
                                    |------------------------------------\
                                    |                                     |
                                    |                                     | Sends Span A to Jaeger
                                    |                                     | (zipkin.istio-system:9411)
                                    v                                     |
[Service A Pod] &amp;lt;----------------- Request with Headers                   |
    |                           |                                         |
    | Envoy Sidecar:           | Application:                             |
    | - Reads headers          | - Receives headers                       |
    | - Creates Span B         | - Must propagate headers to              |
    | - Forwards headers       |   outgoing requests(Manual or Liabrary)  |
    |--------------------------|-----------------------------------------\|
    |                                                                     | Sends Span B to Jaeger
    |                                                                     | (zipkin.istio-system:9411)
    v                                                                     |
[Service B Pod] &amp;lt;----------------- Outgoing Request with Headers          |
    |                           |                                         |
    | Envoy Sidecar:           | Application:                             |
    | - Reads headers          | - Receives headers                       |
    | - Creates Span C         |                                          |.      
    |--------------------------|-----------------------------------------\|
    |                                                                     | Sends Span C to Jaeger
    |                                                                     | (zipkin.istio-system:9411)
    v                                                                     \|
[Jaeger Collector] &amp;lt;------ Span A, Span B, Span C (via Zipkin protocol)&amp;lt;---|
    |
    v
[Jaeger Storage] ----&amp;gt; [Jaeger UI] (Correlates spans by x-b3-traceid to visualize trace)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c238080b8dfcfa72413108c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;7&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c238095a0afc1ef04465bf1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Key Points&lt;/li&gt;
&lt;/ol&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23803190adda17ead3463e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Header Propagation&lt;/span&gt;: Applications must propagate B3 headers (x-b3-traceid, x-b3-spanid, etc.) and x-request-id to ensure spans are linked into a single trace. Without this, traces may appear incomplete. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.9/faq/distributed-tracing/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link1&lt;/a&gt;, &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.9/faq/distributed-tracing/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt; Link&lt;/a&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.8/faq/distributed-tracing/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;2&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380538bb6e36780ba2829&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Envoy&amp;rsquo;s Role&lt;/span&gt;: Envoy generates headers if absent, creates spans, and sends them to the tracing backend. It doesn&amp;rsquo;t rely on the application for span generation but needs header propagation for correlation. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/about/faq/distributed-tracing/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link1&lt;/a&gt;, &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.16/about/faq/distributed-tracing/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link2&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380d385d7f14a7659ed9a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Jaeger as Zipkin Backend&lt;/span&gt;: Jaeger accepts Zipkin&amp;rsquo;s protocol, so spans sent to zipkin.istio-system:9411 are processed and stored by Jaeger. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://academy.broadcom.com/blog/aiops/what-are-zipkin-and-jaeger-and-how-does-istio-use-them&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link1&lt;/a&gt;, &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/tasks/observability/distributed-tracing/jaeger/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link2&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c238041bf0fc5348efa50ef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Sampling&lt;/span&gt;: Your config sets 100% sampling, meaning all requests generate traces, which may increase load on Jaeger. Adjust the sampling rate if needed (e.g., 1% for high-traffic systems) via the Telemetry API. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/tasks/observability/distributed-tracing/jaeger/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link1&lt;/a&gt;, &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/tasks/observability/distributed-tracing/overview/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c23804c89fbe0cc90f419fa&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;8&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380ce9ef0e0ae9c26dbe9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Troubleshooting Tips&lt;/li&gt;
&lt;/ol&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380ba90c1dfefe138860e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Missing Traces&lt;/span&gt;: Ensure applications propagate headers correctly. Check Jaeger UI to verify spans are received. If spans are missing, confirm the zipkin.istio-system:9411 address is correct and Jaeger is running. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/IBM/opentracing-istio-troubleshooting/blob/master/README.md&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link1&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380268c21dc05641f240f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Port Naming&lt;/span&gt;: Ensure service ports are named with the protocol (e.g., http) in Kubernetes service definitions to enable tracing. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://medium.com/avitotech/istio-and-kubernetes-in-production-part-2-tracing-6304a5af82e9&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link1&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c23807e85bdd54bcbe2aed1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Debugging&lt;/span&gt;: Use istioctl proxy-config to inspect Envoy configurations or kubectl port-forward to access the Jaeger UI. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/about/faq/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link1&lt;/a&gt;, &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/tasks/observability/distributed-tracing/jaeger/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c23805c8cc5ce56686156ca&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c238051aa62d6ea846dcc1b&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8.2.5 Viewing distributed tracing data&lt;/span&gt; 분산 트레이싱 데이터 보기 (예거 UI)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23808c9857ecb4e71e4df8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;스팬이 예거(혹은 기타 오픈트레이싱 엔진)로 보내질 때, 트레이스 및 관련 스팬을 쿼리하고 볼 수 있는 방법이 필요하다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23801985daf36431846803&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본 예거 UI를 사용하자.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23807ca15ce5fadd88fbe4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Service 에서 istio-ingressgateway 를 선택한다. 좌측 하단에 Find Traces 를 누르자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23806d86a0f3ed1df472fa&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/ec9798c6-c0a0-41d4-a32e-8a18998861f5/CleanShot_2025-04-27_at_17.33.22.png?table=block&amp;amp;id=1e7b8b2c-1c23-806d-86a0-f3ed1df472fa&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=ZVYlED8KjsL302Y95FasdI-9-qaiqAQzXQafCVhAdqY&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;534.1090909090909&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380249694cc055f507f78&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트레이스가 아무것도 보이지 않으면 curl 트래픽을 조금 보내두자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380c0ba5fc3fc7ffb24db&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;groovy&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;curl -s http://httpbin.istioinaction.io:30000/headers | jq
curl -s http://httpbin.istioinaction.io:30000/headers | jq
...

curl -s http://webapp.istioinaction.io:30000/api/catalog | jq
curl -s http://webapp.istioinaction.io:30000/api/catalog | jq
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c238012861cfdfead3efc7d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/730641a3-a4fe-47dd-8040-44838ed44d25/image.png?table=block&amp;amp;id=1e8b8b2c-1c23-8012-861c-fdfead3efc7d&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=M1UOplSoK5pP5DIqFR8hnfkr6QRfsY3Gok4EAsbFWu4&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;250.15446608462057&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380c08399d72633d9ba7d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트레이스 콘텍스트 및 헤더 전파하기 Propagating trace context and headers : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;올바른 동작을 위해 아래와 같은 헤더 전파 필요&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380279e97ce301eaa650a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;x-request-id&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380058461fd0bf3d28f78&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;x-b3-traceid&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380cd8ddfe1d5f14b84d7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;x-b3-spanid&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380f1be93d146bf95be41&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;x-b3-parentspanid&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380ba9c2cff15cf3493e8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;x-b3-sampled&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380f38dbafc66d120ed91&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;x-b3-flags&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c238020b491da3fde7f5d14&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;x-ot-span-context&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1e7b8b2c1c2380f699c6fa7d187d7545&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&amp;rArr; 즉, 애플리케이션 코드가 요청을 받아 처리를 시작할 때 이 헤더와 그 값을 저장했다가 애플리케이션이 수행해야 하는 모든 발신 요청에 삽입해야 한다는 것이다. 이 작업은 프록시에서 자동으로 수행할 수 없다.&lt;/i&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380afb73adcfa2bf64b11&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c238094ae9be89cd5b89124&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8.2.6 Trace sampling, force traces, and custom tags*&lt;/span&gt;&lt;/span&gt; 트레이스 샘플링, 강제 트레이스, 커스텀 태그&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238058b66cfef58d964db0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;분산 트레이싱 및 스팬 수집은 시스템에 상당한 성능 저하를 초래할 수 있으므로, 서비스가 올바르게 실행 중일 때 분산 트레이싱 수집 빈도를 제한하도록 선택할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380bf92aded0a9d4d492c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞서 데모 프로필로 이스티오를 설치했는데, 이 프로필은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;분산 트레이싱의 샘플링을 100%&lt;/span&gt;로 설정했다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380aeb891e6786c14bad4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;시스템에서 수집할 트레이스 비율을 설정함으로써 트레이스 샘플링을 제어할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380bcbb56cfd5f2a00e32&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380358726c4dfdc4daf6c&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;메시의 트레이스 샘플링 비율 조정하기&lt;/u&gt;&lt;/span&gt; TUNING THE TRACE SAMPLING FOR THE MESH&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380a38a45ec40703affc2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;백엔드 분산 트레이싱을 설치할 때, 런타임에 혹은 워크로드별로 설정했던 것처럼 샘플링 비율도 마찬가지로 설정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c238067bfc5e3c57ad8655c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트레이싱 설정이 다음과 같아지도록 istio-system 네임스페이스에 있는 istio configmap 의 MeshConfig 를 수정해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c238091974ed643d856edea&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;excel&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 
KUBE_EDITOR=&quot;nano&quot; kubectl edit -n istio-system cm istio
...
     sampling: 10  # &amp;lt;-- from 100
...

# 샘플링 적용은 istio-ingressgateway 재배포 필요 참고.
kubectl rollout restart deploy -n istio-system istio-ingressgateway
...
=&amp;gt; 확인은 못해봄. rollout restart 로 적용되는지, 혹은 파드 삭제가 필요한지 확인해보자.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c238031b837f2eb39a556e4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380a494d3ed6211e3c319&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이로써 서비스 메시 내 모든 워크로드에서 샘플링 비율이 전역적으로 10%로 바뀐다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c238001ab62dbc5f2a48c89&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;전역 설정 대신 애노테이션으로 워크로드별로도 설정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23801da490d371c08ef2b4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서는 트레이싱 설정을 포함하도록 디플로이먼트 파드 템플릿의 애노테이션을 편집한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23806198d3ea4104a0188e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
cat ch8/webapp-deployment-zipkin.yaml
...
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |
          tracing:
            sampling: 10 # 퍼센트 직접 수정 후 적용 해보세요!
            zipkin:
              address: zipkin.istio-system:9411
...

# 적용 시 파드 재생성으로 위 애노테이션 적용으로 짐작.. 확인은 못해봄...
kubectl apply -f ch8/webapp-deployment-zipkin.yaml -n istioinaction

# webapp pod가 재생성된다
kubectl get po -n istioinaction -w                     
NAME                       READY   STATUS    RESTARTS   AGE
catalog-6b79b4c59d-g5z4w   2/2     Running   0          12h
webapp-77b899c86b-nxl72    2/2     Running   0          12h
webapp-65cb5d6688-nm5hq    0/2     Pending   0          0s
webapp-65cb5d6688-nm5hq    0/2     Pending   0          0s
webapp-65cb5d6688-nm5hq    0/2     Init:0/1   0          0s
webapp-65cb5d6688-nm5hq    0/2     PodInitializing   0          1s
webapp-65cb5d6688-nm5hq    1/2     Running           0          2s
webapp-65cb5d6688-nm5hq    2/2     Running           0          2s
webapp-77b899c86b-nxl72    2/2     Terminating       0          12h
webapp-77b899c86b-nxl72    0/2     Terminating       0          12h
webapp-77b899c86b-nxl72    0/2     Terminating       0          12h
webapp-77b899c86b-nxl72    0/2     Terminating       0          12h

# 호출 테스트
curl -s http://webapp.istioinaction.io:30000/api/catalog | jq
curl -s http://webapp.istioinaction.io:30000/api/catalog | jq
curl -s http://webapp.istioinaction.io:30000/api/catalog | jq
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c23801093c4cc8a66c92765&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238089bad9e45483d7bd5b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;호출 테스트 후 예거 UI에서 샘플링 비율 대로 수집되는지 확인해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c238077b1d0c4237d1fb855&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/14ec4ba0-18b9-4ee2-90ac-69e4a881770b/CleanShot_2025-04-27_at_18.20.21.png?table=block&amp;amp;id=1e7b8b2c-1c23-8077-b1d0-c4237d1fb855&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=UheJIrOWgoFyh-TwHTXS1tFAElmMeHNPWuv0apkzK9I&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;392.845921450151&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c238084a4f3f42ab28761f1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380ac84a8d5f574e3ace8&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;클라이언트에서 트레이싱 강제하기*&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FORCE-TRACING&lt;/span&gt; FROM THE CLIENT&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23804a8626ef56ea04d2dc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;운영 환경&lt;/span&gt;&lt;/span&gt;에서는 트레이스의 &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;샘플링 비율을 최소한으로 설정한 후 문제가 있을 때만 특정 워크로드에 대해 활성화&lt;/span&gt;&lt;/span&gt;하는 것이 이치에 맞다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380e0960af048bfc3c0ad&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;가끔은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;특정 요청(건)&lt;/span&gt;에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트레이싱을 활성화&lt;/span&gt;해야 하는 경우가 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380429b46dfdec42c4018&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오에서는 &lt;span style=&quot;box-sizing: border-box; color: #d34a45;&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;특정 요청에만 트레이싱을 강제하도록 설정&lt;/span&gt;&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380519ac6e0f8a1d034a3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380a6be89e8d372bf379e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 애플리케이션에서 요청에 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;x-envoy-force-trace&lt;/code&gt; 헤더를 추가해, 요청이 만드는 호출 그래프의 스팬과 트레이스를 이스티오가 포착하도록 만들 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380c99e32fcb6f0e87699&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;샘플 애플리케이션에서 한번 시도해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23801db675cce197deff12&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;awk&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
curl -s -H &quot;x-envoy-force-trace: true&quot; http://webapp.istioinaction.io:30000/api/catalog -v
curl -s -H &quot;x-envoy-force-trace: true&quot; http://webapp.istioinaction.io:30000/api/catalog -v
curl -s -H &quot;x-envoy-force-trace: true&quot; http://webapp.istioinaction.io:30000/api/catalog -v
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380d38e17f82e1dbf952a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/692a7887-64a8-4864-9e9f-9b4bfb911277/CleanShot_2025-04-27_at_18.24.30.png?table=block&amp;amp;id=1e7b8b2c-1c23-80d3-8e17-f82e1dbf952a&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=TniUVe5CAChGuBjlepgH1r5-DVwZ3c-UzV51rvD1Rpo&quot; alt=&quot;샘플링 비중과 상관 없이 해당 요청에 트레이스가 기록됨&quot; width=&quot;816&quot; height=&quot;508.38561151079136&quot; /&gt;샘플링 비중과 상관 없이 해당 요청에 트레이스가 기록됨&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380519405fd0bd991d571&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238007ac42dc416ad7b911&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;x-envoy-force-trace&lt;/code&gt; 헤더를 보낼 때마다 해당 요청과 그 요청의 호출 그래프 전체에 대해 트레이싱을 트리거한다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380579958de60a089cdcd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;특정 요청에 대해 더 많은 정보를 얻고 싶을 때 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이 헤더를 주입할 수 있는 API 게이트웨이&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;진단 서비스 같은 도구&lt;/span&gt;를 이스티오 위에 구축할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23808387dec138b2612ffb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c23802089afdf8d160bc505&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;트레이스의 태그 커스터마이징하기&lt;/u&gt;&lt;/span&gt; CUSTOMIZING THE TAGS IN A TRACE&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380f493d2f1b7d2384b6b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스팬에 태그를 추가&lt;/span&gt;하는 것은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션&lt;/span&gt;이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트레이스에 추가 메타데이터를 첨부&lt;/span&gt;(부여)하는 방법이다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380df84f4d3745220e9ad&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;태그&lt;/span&gt;는 단순한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;키-값 쌍&lt;/span&gt;을 말하는 것으로, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션&lt;/span&gt; 혹은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;조직별 커스텀 정보&lt;/span&gt;를 담고 있으며 백엔드 분산 트레이싱 엔진으로 보내는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스팬에 추가&lt;/span&gt;된다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380f5a190c126a6e3ffab&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 책을 저술하는 시점 기준으로는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;세 가지 유형의 커스텀 태그를 설정&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380d3b45cf13662a88359&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;명시적&lt;/span&gt;으로 값 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;지정&lt;/span&gt;하기 Explicitly specifying a value&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23802798f3eba271d435e9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;환경 변수&lt;/span&gt;에서 값 가져오기 Pulling a value from environment variables&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380ebbd1fd60a64a5a805&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청 헤더&lt;/span&gt;에서 값 가져오기 Pulling a value from request headers&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380e3955be19609c20e3d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23800c858ae9258f929880&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 webapp 서비스의 스팬에 커스텀 태그를 추가하려면, 해당 워크로드의 Deployment 리소스에 다음과 같이 애노테이션을 추가할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c238068a4b8efe31152f8d9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#
cat ch8/webapp-deployment-zipkin-tag.yaml
...
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |
          tracing:
            sampling: 100
            customTags:
              custom_tag: # 커스텀 태그의 키
                literal:
                  value: &quot;Test Tag&quot; # 커스텀 태그의 값
            zipkin:
              address: zipkin.istio-system:9411
...

# webapp 에 커스텀 태그 적용
kubectl apply -n istioinaction -f ch8/webapp-deployment-zipkin-tag.yaml

# 호출
for in in {1..10}; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; sleep 0.5; done
for in in {1..10}; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; sleep 0.5; done
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380b893f8ed2bda2fca93&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/0083a4d1-52bb-4284-8cba-f71e45973520/CleanShot_2025-04-27_at_18.33.05.png?table=block&amp;amp;id=1e7b8b2c-1c23-80b8-93f8-ed2bda2fca93&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=LVevkHwWhE-Co8pT9Vonvke_bRKL5fyKTBfDbMUxcqw&quot; alt=&quot;image&quot; width=&quot;768&quot; height=&quot;399.0167597765363&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380168c56dcab3fa9f0c7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380e5aa50f692cd1640cd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;커스텀 태그는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;보고&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;reporting&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터링&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;filtering&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트레이싱 데이터 탐색&lt;/span&gt;에 사용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380c9b203fc1d00a68725&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;스팬이나 트레이스에 포함되는 태그를 커스터마이징하는 방법은 이스티오 문서를 참조하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1e7b8b2c1c23807c888af7c9be249d0c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/tasks/observability/distributed-tracing/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://istio.io/v1.17/docs/tasks/observability/distributed-tracing/&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380eb967bf233c4f61f7b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c23801abe53f97d96921957&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;백엔드 분산 트레이싱 엔진 커스터마이징하기&lt;/u&gt;&lt;/span&gt; CUSTOMIZING THE BACKEND DISTRIBUTED TRACING ENGINE&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380e7943aea52ca37e495&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;분산 트레이싱에 대한 마지막 절인 여기서는 분산 트레이싱 엔진에 연결하는 백엔드 설정을 어떻게 수행하는지 알아보자.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23806f8bf4cfb3bbb1d626&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞서 언급했드시 이스티오는 1.12 버전에서 트레이싱을 포함하는 새로운 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;텔레메트리용 알파 API를 릴리스&lt;/span&gt;했으므로, 트레이싱 설정 면에서 사용자 경험이 개선될 것이라고 기대할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23802bb243e1865874fb7d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;단, 이 절에서 다루는 내용은 다소 심화된 내용이므로 독자의 사용 사례에는 적용되지 않을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380fb94cac26f54303a92&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380dcb5e2d178da5c2878&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지금까지의 예제에서는 백엔드 트레이싱 엔진의 호스트네임과 포트로 이스티오를 설정했다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c238088a4b8d9f1e558c126&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그런데 더 많은 설정을 조정해야 하는 경우에는 어떻게 할까?&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380759236d9006d15663e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어, 예거의 집긴 호환성을 사용하려면 예거 수집기의 특정 엔드포인트로 추적을 전송해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23806f94e3eade5b7c8d51&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본적으로는 이스티오 프록시에서 정적 설정으로 설정한다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c23809eb635c425940efe0b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;집킨 기반 트레이싱 엔진의 기본 트레이싱 설정을 살펴보자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380d7a7b5e23f2bcb9746&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;applescript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 
docker exec -it myk8s-control-plane bash
----------------------------------------
# deploy/webapp 트레이싱 설정 조회 : 현재 기본 설정
istioctl pc bootstrap -n istioinaction deploy/webapp -o json | jq .bootstrap.tracing
{
  &quot;http&quot;: {
    &quot;name&quot;: &quot;envoy.tracers.zipkin&quot;,
    &quot;typedConfig&quot;: {
      &quot;@type&quot;: &quot;type.googleapis.com/envoy.config.trace.v3.ZipkinConfig&quot;,
      &quot;collectorCluster&quot;: &quot;zipkin&quot;,
      &quot;collectorEndpoint&quot;: &quot;/api/v2/spans&quot;,
      &quot;traceId128bit&quot;: true,
      &quot;sharedSpanContext&quot;: false,
      &quot;collectorEndpointVersion&quot;: &quot;HTTP_JSON&quot;
    }
  }
}

exit
----------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380558bd4e38417f9f9ff&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;현재 기본 설정&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380b5b7e3dbd659a094ca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;tracing enging 은 Zipkin-based&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380858651f2989089b172&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Span 은 /api/v2/spans 로 전달 &amp;rarr; jaeger의 collector로 전달!&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c238071a3d3d1b2f78f5f54&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;JSON 엔드포인트로 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380d38302c6e819c08c8d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c23803d9a7fcc5414826318&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본 설정은 커스텀 부트스트랩 설정으로 변경 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380ac82b4fc1ec3ab980d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 위해 configmap 에서 튜닝하고자 하는 설정 스니펫을 지정한다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c238089ba66e5c87d5cf350&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;해당 실습에서는 잘못된 custom bootstrap 설정을 ConfigMap으로 생성하고, 해당 bootstrap을 webapp pod에 적용해본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380ae824ad3e3c34297eb&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 해당 configmap 은 collectorEndpoint 를 변경한 설정 스니펫
cat ch8/istio-custom-bootstrap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-custom-zipkin
data:
  custom_bootstrap.json: |
    {
      &quot;tracing&quot;: {
        &quot;http&quot;: {
          &quot;name&quot;: &quot;envoy.tracers.zipkin&quot;,
          &quot;typedConfig&quot;: {
            &quot;@type&quot;: &quot;type.googleapis.com/envoy.config.trace.v3.ZipkinConfig&quot;,
            &quot;collectorCluster&quot;: &quot;zipkin&quot;,
            &quot;collectorEndpoint&quot;: &quot;/zipkin/api/v1/spans&quot;, # 실습을 위한 잘못된 endpoint를 설정!
            &quot;traceId128bit&quot;: &quot;true&quot;,
            &quot;collectorEndpointVersion&quot;: &quot;HTTP_JSON&quot;
          }
        }
      }
    }

# 이 부트스트랩 설정을 덮어 쓰려는 워크로드가 있는 네임스페이스에 configmap 을 적용할 수 있다.
kubectl apply -n istioinaction -f ch8/istio-custom-bootstrap.yaml

# 확인
kubectl get cm -n istioinaction
NAME                  DATA   AGE
istio-ca-root-cert    1      45h
istio-custom-zipkin   1      3s
kube-root-ca.crt      1      45h

# 해당 configmap 을 참조하는 Deployment 리소스의 파드 템플릿에 애노테이션을 추가
cat ch8/webapp-deployment-custom-boot.yaml
...
  template:
    metadata:
      annotations:
        sidecar.istio.io/bootstrapOverride: &quot;istio-custom-zipkin&quot; # 부트스트랩 설정을 istio-custom-zipkin 사용
        proxy.istio.io/config: |
          tracing:
            sampling: 10
            zipkin:
              address: zipkin.istio-system:9411
      labels:
        app: webapp
...

# 변경된 설정으로 webapp을 재배포 합니다
kubectl apply -n istioinaction -f ch8/webapp-deployment-custom-boot.yaml


#
docker exec -it myk8s-control-plane bash
----------------------------------------
# deploy/webapp 트레이싱 설정 조회 : 현재 기본 설정
istioctl pc bootstrap -n istioinaction deploy/webapp -o json | jq .bootstrap.tracing
{
  &quot;http&quot;: {
    &quot;name&quot;: &quot;envoy.tracers.zipkin&quot;,
    &quot;typedConfig&quot;: {
      &quot;@type&quot;: &quot;type.googleapis.com/envoy.config.trace.v3.ZipkinConfig&quot;,
      &quot;collectorCluster&quot;: &quot;zipkin&quot;,
      &quot;collectorEndpoint&quot;: &quot;/zipkin/api/v1/spans&quot;, # webapp의 jaeger collector가 istio-custom-zipkin에 설정된 잘못된 endpoint로 설정됨
      &quot;traceId128bit&quot;: true,
      &quot;collectorEndpointVersion&quot;: &quot;HTTP_JSON&quot;
    }
  }
}

exit
----------------------------------------

# 호출
for in in {1..10}; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; sleep 0.5; done
for in in {1..10}; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; sleep 0.5; done
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380888fd0e0fe774135b8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;JAEGER 대시보드 확인 : webapp 추적 시 collectorEndpoint 에 잘못된 경로 설정으로&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;webapp Span&lt;/code&gt;이 출력되지 않습니다&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c23807b8a46d876066f6009&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/a94462e9-65da-4984-afb3-45c191ea37f4/image.png?table=block&amp;amp;id=1e8b8b2c-1c23-807b-8a46-d876066f6009&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=6WHgX1JwKJxtuBdc_fstsfjCT2x3xVJxLMk9rhweaH8&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;313.3378106111484&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c238002a6f4ed8a0bea1210&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 실습을 위해 다시 설정 원복&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c238007b34ccd747adb0259&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vala&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# istio-custom-zipkin 어노테이션이 없는 webapp으로 재배포
kubectl apply -n istioinaction -f services/webapp/kubernetes/webapp.yaml

# 호출
for in in {1..10}; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; sleep 0.5; done
for in in {1..10}; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; sleep 0.5; done
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e7b8b2c1c2380d8ae89c85d733db66b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;JAEGER 대시보드 확인&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e7b8b2c1c23804eb34de0a041e5ee1b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/db879cec-7c5a-4f3d-9b97-3a666ea52aa4/CleanShot_2025-04-27_at_18.53.06.png?table=block&amp;amp;id=1e7b8b2c-1c23-804e-b34d-e0a041e5ee1b&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=wa2aXCxZxhQjZhSTZoYJXFex-eLKEaX1BwYOYpzwlcY&quot; alt=&quot;image&quot; width=&quot;816&quot; height=&quot;377.993413830955&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e7b8b2c1c2380279891d6eb2a03b913&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380a6b8b3c49554bda7eb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380f6a13dc63764c8e338&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c23800ab562fe020493c1d9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8.3 Visualization with Kiali&lt;/span&gt; 키알리를 이용한 시각화 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kiali.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://kiali.io/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1e8b8b2c1c23800c8548eb5c36d54a83&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : Kiali - The Console for Istio Service Mesh&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380a481a7e152568fe5b2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 오픈소스 프로젝트 키알리의 강력한 시각화 대시보드를 함께 사용할 수 있는데, 이는 런타임에 서비스 메시를 이해하는 데 도움을 줄 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c23809496a3c5f6f7025862&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;키알리는 프로메테우스와 기반 플랫폼에서 많은 양의 메트릭을 가져와 메시 내 구성 요소의 런타임 그래프를 구성하는데, 이 그래프가 서비스 간의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;통신 상황을 시각적&lt;/span&gt;으로 이해하는 데 도움이 된다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380b5b581f214dfc2e8a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 그래프와 상화작용해 문제가 될 수 있는 영역을 파고들어 무슨 일이 일어나고 있는지 자세히 알아볼 수도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380c9bad4e2de3d466f8c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;키알리는 그라파나와 다른데, 키알리는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;실시간으로 갱신되는 메트릭&lt;/span&gt;을 사용해&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 서비스가 서로 어떻게 통신하는지에 대한 방향 그래프&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;directed graph &lt;/span&gt;를 구축하는데 집중하기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c23808382dfe552e02e7e47&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그라파나는 게이지, 카운터, 차트 등이 포함된 대시보드에는 훌륭하지만, 클러스터 내 서비스에 대한 상호작용형 그림이나 지도를 보여주지는 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380ac93d5fbd2d4a85bf7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 절에서는 키알리 대시보드의 기능을 살펴본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c23809cb882f196575bcef5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c238002b386d93a04425a68&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;8.3.1 Installing Kiali&lt;/span&gt; 키알리 설치하기 &lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c238099a6b4f74bd54a0d7a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스나 그라파나와 마찬가지로 이스티오는 키알리 샘플 버전을 기본적으로 제공한다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380b58740cdabf9e14f3e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오 팀과 키알리 팀&lt;/span&gt;은&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 실제로 배포&lt;/span&gt;할 때는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;키알리 오퍼레이터&lt;/span&gt;를 사용하길 권장한다. &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/kiali/kiali-operator&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/kiali/kiali-operator&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380bc96a2e2cd66f9ca7a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 절에서도 이 방식을 사용할 것이다. 키알리 설치에 대한 자세한 내용은 공식 설치 가이드를 참조하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1e8b8b2c1c23802b8613e0d5b89b3ae3&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://v1-41.kiali.io/docs/installation/installation-guide/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://v1-41.kiali.io/docs/installation/installation-guide/&lt;/a&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23803e8923ddaea9f16c6e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;먼저 키알리 오퍼레이터 설치부터 시작한다 - 참고 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://netpple.github.io/docs/istio-in-action/Istio-ch8-observability-2-visibility#831-kiali-%EC%84%A4%EC%B9%98&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://artifacthub.io/packages/helm/kiali/kiali-operator/1.63.2&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Helm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c238068b122d4af1a5b131d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# helm repo
helm repo add kiali https://kiali.org/helm-charts
helm repo update 

# kiali-operator install : 책은 1.40.1
helm install --namespace kiali-operator --create-namespace --version 1.63.2 kiali-operator kiali/kiali-operator

# kiali-operator 확인
kubectl get pod -n kiali-operator
NAME                             READY   STATUS    RESTARTS   AGE
kiali-operator-584858fb7-zcjv2   1/1     Running   0          61s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380738ecae1f063e64b73&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380cf8973d04a391f32f9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istio-system 네임스페이스에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;키알리 인스턴스&lt;/span&gt; 배포 : 웹 대시보드를 갖춘 실제 애플리케이션&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c23804aaceef19a73450ddc&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 앞 절에서 배포했던 프로메테우스와 예거에 연결할 수 있게 설정
cat ch8/kiali.yaml
apiVersion: kiali.io/v1alpha1
kind: Kiali
metadata:
  namespace: istio-system
  name: kiali
spec:
  istio_namespace: &quot;istio-system&quot;  
  istio_component_namespaces:
    prometheus: prometheus
  auth:    
    strategy: anonymous # 익명 접근 허용
  deployment:
    accessible_namespaces:
    - '**'
  external_services:    
    prometheus: # 클러스터 내에서 실행 중인 프로메테우스 설정
      cache_duration: 10
      cache_enabled: true
      cache_expiration: 300
      url: &quot;http://prom-kube-prometheus-stack-prometheus.prometheus:9090&quot;    
    tracing: # 클러스터 내에서 실행 중인 예거 설정
      enabled: true
      in_cluster_url: &quot;http://tracing.istio-system:16685/jaeger&quot;
      use_grpc: true

# 키알리 인스턴스(대시보드) 설치
kubectl apply -f ch8/kiali.yaml


# 확인
kubectl get deploy,svc -n istio-system kiali
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/kiali   1/1     1            1           31s

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)              AGE
service/kiali   ClusterIP   10.200.1.172   &amp;lt;none&amp;gt;        20001/TCP,9090/TCP   31s

# NodePort 변경 및 nodeport kiali(30003)
kubectl patch svc -n istio-system kiali -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 20001, &quot;targetPort&quot;: 20001, &quot;nodePort&quot;: 30003}]}}'

# Kiali 접속 1 : NodePort
open http://127.0.0.1:30003
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23801a9200d6dd72889f61&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프로메테우스와 예거 모두 기본적인 통신 보안 전략이 따로 있지는 않으며, 앞 단에 리버스 프록시를 둘 것을 권장한다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380378f06f44bbcbeb9bd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;키알리에서는 프로메테우스에 연결할 때 TLS와 기본적인 인증을 사용할 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380a98517de49fba646a2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c238050a9edc35b9968329e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽 확인을 위해서 반복 호출&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380829576c65c86049e55&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;perl&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c23805ba93bfc2fbe8707b4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380da8ac1efabdd70d850&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Overview&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;dashboard&lt;/span&gt; : 네임스페이스와 각 네임스페이스에서 실행 중인 애플리케이션의 개수 표기 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&amp;rArr; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istioinaction&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #347da8;&quot; class=&quot;highlighted-color color-blue&quot;&gt; 네임스페이스 선택&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c23807c85f9c35fd411980a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/d9f2c389-176b-46a4-89d0-e5cedb970d96/CleanShot_2025-04-27_at_19.15.29.png?table=block&amp;amp;id=1e8b8b2c-1c23-807c-85f9-c35fd411980a&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=Fz9MnTmDcxkkGI-pgKXHNmv37oZtfI09Q_BToFmvEEE&quot; alt=&quot;app 클릭 시 해당 네임스페이스에 app 정보 페이지로 넘어감&quot; width=&quot;513.9772338867188&quot; height=&quot;276.9877311023757&quot; /&gt;app 클릭 시 해당 네임스페이스에 app 정보 페이지로 넘어감&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c238053a4a0c90a9a6ad326&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23807fbb32f03281f8f127&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Graph&lt;/span&gt; : 서비스 매시의 트래픽 흐름을 보여주는 방향 그래프 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rArr; Display 체크&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c238039a31fc127130bb0a8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽의 이동과 흐름 Traversal and flow of traffic&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c238094bdaff114045a1d21&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;바이트 수, 요청 개수 등 Number of bytes, requests, and so on&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380a88ae6ca05961bb6f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여러 버전에 대한 여러 트래픽 흐름(예: 카나리 릴리스나 가중치 라우팅)&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380ee953cd1d2f2d9e9db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;초당 요청 수 &lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Requests/second&lt;/span&gt;; 총량 대비 여러 버전의 트래픽 비율&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c238097b2dae730ba5325e3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네트워크 트래픽에 기반한 애플리케이션 상태 health&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c238057bd11c6996fb7c3f5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;HTTP/TCP 트래픽&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380bbb2f0c98efaefe3f9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;빠르게 식별할 수 있는 네트워크 실패&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c238072bc70e256ef38111a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/85fad99a-41dc-4dc8-ac44-1e02241a31b9/CleanShot_2025-04-27_at_19.21.05.png?table=block&amp;amp;id=1e8b8b2c-1c23-8072-bc70-e256ef38111a&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=RGW0B6Dwh6GwvQHVJ-DY519SlssuJrIZn5hqO2GuIeg&quot; alt=&quot;image&quot; width=&quot;816&quot; height=&quot;554.957345971564&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c23802babded3d42ea9ec4a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23805d8b94cdb1d9eb8b17&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Workloads &amp;rarr; Traces 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380bc8e8ffd6aa1b062fd&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/2f01e5d0-2b68-4838-9220-707a94dcc505/image.png?table=block&amp;amp;id=1e8b8b2c-1c23-80bc-8e8f-fd6aa1b062fd&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=W-BHQ5e9rxPLJQeco1GElNJi9waxrhP2e8x7dtAG7U0&quot; alt=&quot;image&quot; width=&quot;816&quot; height=&quot;529.7131313131313&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380c18563df4136f11e70&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c23801494d0c883a239cf80&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;트레이스, 메트릭, 로그의 연관성&lt;/u&gt;&lt;/span&gt; CORRELATION OF TRACES, METRICS, AND LOGS&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1e8b8b2c1c23800294b5f6910898e426&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Workloads 메뉴&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23806eaf34d0a384c93f9a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Overview : Pods of the service, Istio configuration applied to it, and a graph of the upstreams and downstreams&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c23802794a9ca5e5d15e01e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Traffic : Success rate of inbound and outbound traffic&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c23808e91b0e76a94559ccf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Logs : Application logs, Envoy access logs, and spans correlated together Inbound Metrics and Outbound Metrics Correlated with spans&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380b5a5c4cb047a4d4ad1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Traces : The traces reported by Jaeger&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c238029bdf9c45d319befe1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Envoy : The Envoy configuration applied to the workload, such as clusters, listeners, and routes&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c238037931dd27077f8e81c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/7af3e3fe-4c7c-4b0f-a04e-22062f262c00/CleanShot_2025-04-28_at_22.01.51.png?table=block&amp;amp;id=1e8b8b2c-1c23-8037-931d-d27077f8e81c&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=iIxtVByomNdLT3vKpcgm9jgiynyYt2eTFLnGzWELbtA&quot; alt=&quot;image&quot; width=&quot;816&quot; height=&quot;678.6868965517242&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c238051b95ff918a35f6cdc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c238005aa30cffb1a8a6a32&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Kiali &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;workload&lt;/span&gt; vs. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;application&lt;/span&gt; 차이&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c238072b011ecfcf907dc7b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380e3b5e4d82854e49397&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;A workload is a running binary that can be deployed as a set of identical running replicas. For example, in Kubernetes, this would be the Pods part of a deployment. A service A deployment with three replicas would be a workload.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e8b8b2c1c238096921ccc47ae562c31&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380e394a5cd498be582e8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;An application is a grouping of workloads and associated constructs like services and configuration. In Kubernetes, this would be a service A along with a service B and maybe a database. Each would be its own workload, and together they would make up a Kiali application.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380c18b2fe7441b68cc55&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c238089bff0dffebeab0bdd&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Kiali is useful for service mesh operators &lt;/span&gt;키알리가 운영에 도움을 주는 것&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c238064a40bc9faae1fe247&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;VirtualService pointing to non-existent Gateway&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380eda0d7d8f62f2fdbe6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Routing to destinations that do not exist&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380568d02ce363c3fe3fa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;More than one VirtualService for the same host&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c23808bb0c5ebe6f956dc33&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Service subsets not found&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380ccbfe5e13f6ef5502e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380f087e5e6f6f749e456&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;8.3.2 Conclusion&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380299111f78faf04b309&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c238004b55cef8ace80a744&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;8.4. Istio 최신 버전에 Trace 를 Otel (OpenTelemetry) 를 사용하여 설치 및 설정 후 분산 트레이싱 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/tasks/observability/distributed-tracing/opentelemetry/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1e8b8b2c1c23800e832ee4d9f04d2d7e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;8.4.1. Istio 1.22.0 version으로 업그레이드&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e8b8b2c1c238023a42ee8027a1f8e46&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Otel을 통해서 tracing을 하기 위해서는 meshConfig.extensionProviders[].opentelemetry.resource_detectors 설정이 필요하다. 해당 설정은 istio 1.22.0 version 이상부터 지원하기 때문에 istio version upgrade를 진행해준다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23803c827df816fa8a8b2f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;The resource_detectors field for configuring OpenTelemetry resource detectors (e.g., to include environment-specific attributes in traces) is a relatively new feature and is only supported in newer versions of Istio (likely Istio 1.22 or later, based on the OpenTelemetry integration enhancements).&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380d7b030f2cc9fd0bb75&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;If you're using an older version of Istio (e.g., 1.21 or earlier), this field is not supported, resulting in the error.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380ab96faf2584d78e539&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;docker exec -it myk8s-control-plane bash

export ISTIOV=1.22.0
echo 'export ISTIOV=1.22.0' &amp;gt;&amp;gt; /root/.bashrc

curl -s -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIOV sh -
cp istio-$ISTIOV/bin/istioctl /usr/local/bin/istioctl

istioctl upgrade

# istio-ingressgateway 서비스 : NodePort 변경 및 nodeport 지정 변경 , externalTrafficPolicy 설정 (ClientIP 수집)
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 8080, &quot;nodePort&quot;: 30000}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 443, &quot;targetPort&quot;: 8443, &quot;nodePort&quot;: 30005}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;:{&quot;externalTrafficPolicy&quot;: &quot;Local&quot;}}'
kubectl describe svc -n istio-system istio-ingressgateway&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c23803b85b8e3b8183a81e4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;8.4.2. bookinfo application 배포 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/examples/bookinfo/#deploying-the-application&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e8b8b2c1c23806390c0f766bfa68f67&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;git clone https://github.com/istio/istio.git

cd istio

kubectl label namespace default istio-injection=enabled
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

kubectl get services
NAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.0.0.31    &amp;lt;none&amp;gt;        9080/TCP   6m
kubernetes    ClusterIP   10.0.0.1     &amp;lt;none&amp;gt;        443/TCP    7d
productpage   ClusterIP   10.0.0.120   &amp;lt;none&amp;gt;        9080/TCP   6m
ratings       ClusterIP   10.0.0.15    &amp;lt;none&amp;gt;        9080/TCP   6m
reviews       ClusterIP   10.0.0.170   &amp;lt;none&amp;gt;        9080/TCP   6m

kubectl get pods
details-v1-1520924117-48z17      2/2       Running   0          6m
productpage-v1-560495357-jk1lz   2/2       Running   0          6m
ratings-v1-734492171-rnr5l       2/2       Running   0          6m
reviews-v1-874083890-f0qf0       2/2       Running   0          6m
reviews-v2-1343845940-b34q5      2/2       Running   0          6m
reviews-v3-1813607990-8ch52      2/2       Running   0          6m

kubectl exec &quot;$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')&quot; -c ratings -- curl -sS productpage:9080/productpage | grep -o &quot;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&quot;
&amp;lt;title&amp;gt;Simple Bookstore App&amp;lt;/title&amp;gt;

# Bookinfo gateway 설치
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created

kubectl get gateway
NAME               AGE
bookinfo-gateway   32s

echo &quot;127.0.0.1       bookinfo.default.io&quot; | sudo tee -a /etc/hosts
cat /etc/hosts | tail -n 5

# 실습 진행을 위해 GATEWAY_URL 변수 설정 -&amp;gt; /etc/hosts에 domain등록 했고, istio-ingressgateway의 http는 30000 NodePort 사용중!
export GATEWAY_URL=bookinfo.default.io:30000

curl -s &quot;http://${GATEWAY_URL}/productpage&quot; | grep -o &quot;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&quot;
&amp;lt;title&amp;gt;Simple Bookstore App&amp;lt;/title&amp;gt;

# DestinationRule 설정
kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
kubectl get destinationrules -o yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380d5ace8ee38dbb917f9&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;8.4.3. Otel Tracing 설정&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c238074819efca258802637&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Deploy OpentTelemetry Collector&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c23804c809dfb680cfaef45&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;sql&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl create namespace observability
kubectl apply -f samples/open-telemetry/otel.yaml -n observability&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23801ebacddeef4e07acd3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Install Exporter&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380248df4de56723e6266&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;gRPC or Http를 통해서 span을 opentelemetry-collector로 export 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380e79a43e05d660cba5a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서는 http로 진행하도록 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380c0a14aeac91854f2d2&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;docker exec -it myk8s-control-plane bash

# Exporting via gRPC
cat &amp;lt;&amp;lt;EOF | istioctl install -y -f -
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
    extensionProviders:
    - name: otel-tracing
      opentelemetry:
        port: 4317
        service: opentelemetry-collector.observability.svc.cluster.local
        resource_detectors:
          environment: {}
EOF

# Exporting via http
cat &amp;lt;&amp;lt;EOF | istioctl install -y -f -
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
    extensionProviders:
    - name: otel-tracing
      opentelemetry:
        port: 4318
        service: opentelemetry-collector.observability.svc.cluster.local
        http:
          path: &quot;/v1/traces&quot;
          timeout: 5s
          headers:
            - name: &quot;custom-header&quot;
              value: &quot;custom value&quot;
        resource_detectors:
          environment: {}
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23807fb80ecfafe413813f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Enable tracing for mesh via Telemetry API&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380bf8cceee2db8bfcefc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;telemetry resource를 생성하여 tracing을 enable한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c23805d917bfa68dc1812ea&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl apply -f - &amp;lt;&amp;lt;EOF
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: otel-demo
spec:
  tracing:
  - providers:
    - name: otel-tracing
    randomSamplingPercentage: 100
    customTags:
      &quot;my-attribute&quot;:
        literal:
          value: &quot;default-value&quot;
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380e1a7acd7a7a17d8b04&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 반복 접근을 통해서 tracing이 정상적으로 enable되어 span이 opentelemetry-collector에 의해서 jaeger에서 볼 수 있는지 확인한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e8b8b2c1c238067a953dd4e780cf61b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;$ for i in $(seq 1 100); do curl -s -o /dev/null &quot;http://$GATEWAY_URL/productpage&quot;; done&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c238068b888fea3a9ffffc8&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/c97299b5-b752-4099-9291-b4c287392227/C492077F-1B29-4828-A330-2BBE31E5FBBC_1_201_a.jpeg?table=block&amp;amp;id=1e8b8b2c-1c23-8068-b888-fea3a9ffffc8&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1746309600000&amp;amp;signature=xiXeW4RMJwtowYtpMmenSd9vzDncMEKpfLFMt_qQ_uY&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;564.3400809716599&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380ac8f61c3ecc02beb1b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그림에서 볼 수 있듯이 위에서 telemetry resource를 통해 추가한 customTags인 my-attribute: default-value가 span에 추가되어 tracing되고 있는것을 볼 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e8b8b2c1c2380f4bdeadda5674765bf&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e8b8b2c1c2380009fd6e4adeff5b82a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;8.5. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Summary&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c238071870bf196ba03b0ea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그라파나는 Istio 제어 평면과 데이터 평면을 위한 기본 대시보드를 포함한 Istio 메트릭을 시각화하는 데 사용할 수 있습니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c238078b776c226e7931942&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Grafana can be used to visualize Istio metrics, including using out-of-the-box dashboards for the Istio control plane and data plane.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380b58d97e090a8d426e9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;분산 추적은 요청을 처리하는 데 관련된 구성 요소에 대한 인사이트를 제공합니다. 이를 위해 서비스 프록시에서 추적 헤더로 요청에 주석을 달 수 있습니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380f5a642e005e79277a1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Distributed tracing gives us insights into the components involved in serving a request. To do so, it annotates requests with trace headers at the service proxy.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e8b8b2c1c238027ae40d019f67b12ac&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션은 요청을 전체적으로 보기 위해 트레이스 헤더를 전파해야 합니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380ef8a85e15939533c56&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Applications need to propagate trace headers in order to get a full view of a request.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e8b8b2c1c23802ba1b0d9844a878659&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트레이스는 분산 시스템에서 지연 시간을 디버깅하고 홉을 요청하는 데 사용할 수 있는 스팬 모음입니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23800d8c0ece2b8fac9f39&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;A trace is a collection of spans that can be used to debug latency and request hops in a distributed system.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e8b8b2c1c238048afffd7084b60b9db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Istio는 Istio 설치 중에 defaultConfig을 사용하여 추적 헤더를 라우팅하도록 구성할 수 있으며, 이는 전체 메쉬에 적용됩니다. 또는 주석 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://proxy.istio.io/config&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;proxy.istio.io/config&lt;/a&gt; 을 사용하여 workload 단위로 동일한 구성을 적용할 수 있습니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23807b8426fd162787316c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Istio can be configured to route tracing headers using defaultConfig during Istio installation, which applies to the entire mesh; or the same configuration can be applied on a per-workload basis using the annotation &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://proxy.istio.io/config&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;proxy.istio.io/config&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e8b8b2c1c23803797f3e4313f392695&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;키알리 연산자는 프로메테우스의 메트릭과 예거의 트레이스를 읽도록 구성할 수 있습니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c238054854feb5588db49a2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;The Kiali Operator can be configured to read metrics from Prometheus and traces from Jaeger.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e8b8b2c1c2380fb935eda7c8f76a3b4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Kiali는 디버깅을 돕기 위한 네트워킹 그래프와 메트릭 상관관계를 포함하여 Istio 관련 디버깅 대시보드를 꽤 많이 보유하고 있습니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e8b8b2c1c23804fba4effe7685421c7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Kiali has quite a few Istio-specific debugging dashboards, including a networking graph and metric correlation to aid debugging.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Kubernetes</category>
      <author>ManMan</author>
      <guid isPermaLink="true">https://gylee815.tistory.com/33</guid>
      <comments>https://gylee815.tistory.com/33#entry33comment</comments>
      <pubDate>Sat, 3 May 2025 23:44:44 +0900</pubDate>
    </item>
    <item>
      <title>[AEWS 3기] 12주차 - Amazon VPC Lattice for Amazon EKS</title>
      <link>https://gylee815.tistory.com/32</link>
      <description>&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380559e6ef6b2cae745cf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Kubernetes의 애플리케이션 네트워킹 변화 과정&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1e1b8b2c1c23807d8b85fb0c3bd4127f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Kubernetes의 네트워킹 스택은 마이크로서비스 아키텍처의 발전과 함께 진화해왔습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380a7b5dbd54a93b9a43d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c238002abe6cf59e5bb4467&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;첫 시작 : 한 개의 Kubernetes 클러스터를 사용할 때&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/riHYM/btsNB5MmfSp/qkXWzOwBg3azEhuKi6cJ61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/riHYM/btsNB5MmfSp/qkXWzOwBg3azEhuKi6cJ61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/riHYM/btsNB5MmfSp/qkXWzOwBg3azEhuKi6cJ61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FriHYM%2FbtsNB5MmfSp%2FqkXWzOwBg3azEhuKi6cJ61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;606&quot; height=&quot;337&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c238038ab45ea91fc616d70&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380ee9945ca6bf51e959a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;단일 클러스터 내부에 배포되는 Kubernetes 서비스들은 클러스터 내부의 DNS 인 CoreDNS 및 Ingress 리소스를 통해서 내부 서비스 간 통신 및 외부로의 통신을 모두 네이티브하게 구현할 수 있음.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380569dd6cd9c38d55d05&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사용되는 방법들
&lt;ul class=&quot;notion-bulleted-list numbers&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380e79d0cce0f8b487699&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;경로 기반 라우팅으로 서비스 구조화 및 관리 개선&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238004a4dbe9af2990c0a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;SSL/TLS 종단점 제공을 통한 보안 강화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380c1bb09e4718eaad5f7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본 Service 리소스로 시작&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238003addbe4b36713a4f9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;NodePort, ClusterIP, LoadBalancer 타입의 서비스 구현&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380bb953cfe23b3bcb1bd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Ingress 활용&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380a3aa8fd4dc2dc0334c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;단순한 내부 통신과 외부 노출 기능에 중점&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e1b8b2c1c23801e8d46e329e008fdbc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380b98341e7db285f96f0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;워크로드의 진화 : 여러 개의 Kubernetes 클러스터를 사용할 때&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;369&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UiVqp/btsNAJjw9GK/tjePYuCm2sK3Y6tmdTJLtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UiVqp/btsNAJjw9GK/tjePYuCm2sK3Y6tmdTJLtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UiVqp/btsNAJjw9GK/tjePYuCm2sK3Y6tmdTJLtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUiVqp%2FbtsNAJjw9GK%2FtjePYuCm2sK3Y6tmdTJLtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;905&quot; height=&quot;369&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;369&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380a4b588c97f54b7a8b1&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwG5f5/btsNBGsuWDk/s1mE9LxEqTo6BgPv2eeFIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwG5f5/btsNBGsuWDk/s1mE9LxEqTo6BgPv2eeFIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwG5f5/btsNBGsuWDk/s1mE9LxEqTo6BgPv2eeFIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwG5f5%2FbtsNBGsuWDk%2Fs1mE9LxEqTo6BgPv2eeFIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;880&quot; height=&quot;398&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;398&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c23802690f2e95f21e3e6a9&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380258f1edf2b738abff5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션이 진화하고, 조직이 발전하면서 서비스들이 독자적인 VPC 및 Kubernetes 클러스터에 운영되기 시작하면서 클러스터 운영자들은 이런 VPC 간 / 클러스터 간의 애플리케이션 네트워킹에 대해서 고민하게 됨.
&lt;ul class=&quot;notion-bulleted-list numbers&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380a0b64fd35a872a3d4d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Service Discovery&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380ecbd3cfbb2da153fab&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스의 IP 주소 및 포트 정보를 동적으로 관리&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23802d9b92c7a8696ba4ea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;각 서비스 인스턴스를 지속적으로 Health Check&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23801b8820f05fce52987f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 관련 메타데이터와 구성 정보를 저장하고 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e1b8b2c1c23808a92c4d2edb48fecb4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Service Discovery 패턴
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380ae9faae7defb44a222&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클라이언트가 직접 서비스 레지스트리를 쿼리하여 서비스 위치를 찾는 방식(예: Netflix Eureka, Spring Cloud)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380f19662c6007a5c6513&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클라이언트 사이드&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380899e26e3d9522d018d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션 끼리 통신을 하기 위해선 가장 먼저 내가 통신하고 싶은 서비스 혹은 마이크로 서비스가 어디에 있는지를 아는 것이 선행 되어야 함 &amp;rarr; Service Discovery&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;491&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kFuST/btsNz6F3FNr/ai29MsD6vcj33LMEzebjg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kFuST/btsNz6F3FNr/ai29MsD6vcj33LMEzebjg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kFuST/btsNz6F3FNr/ai29MsD6vcj33LMEzebjg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkFuST%2FbtsNz6F3FNr%2Fai29MsD6vcj33LMEzebjg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;866&quot; height=&quot;491&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;491&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c238058a2cae8a1e5ea8cbc&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list numbers&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380d28c38f5a1bbbe4d7b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서버 사이드&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c238014b5cfec1b1100d444&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;로드 밸런서가 서비스 레지스트리를 쿼리하고 클라이언트 요청을 적절한 서비스로 라우팅&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buUJ7j/btsNByuwsTj/ZY1kbfC2u8exkzoJmGq5Ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buUJ7j/btsNByuwsTj/ZY1kbfC2u8exkzoJmGq5Ck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buUJ7j/btsNByuwsTj/ZY1kbfC2u8exkzoJmGq5Ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuUJ7j%2FbtsNByuwsTj%2FZY1kbfC2u8exkzoJmGq5Ck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;714&quot; height=&quot;397&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;448&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380d0a806fb0548c12523&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list numbers&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380898d8bdee37e65bae5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;두 개 이상의 여러 VPC 사이에서는?&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c23805682a4f3301b547b31&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;AWS의 경우에는 VPC Peering, PrivateLink, AWS Transit Gateway 등의 다양한 옵션을 통해 각 VPC를 연결&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;489&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BB4S9/btsNB6qXivm/B8t5Xow326Xsvjuyg6zhd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BB4S9/btsNB6qXivm/B8t5Xow326Xsvjuyg6zhd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BB4S9/btsNB6qXivm/B8t5Xow326Xsvjuyg6zhd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBB4S9%2FbtsNB6qXivm%2FB8t5Xow326Xsvjuyg6zhd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;796&quot; height=&quot;410&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;489&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380f3b358faefc00ec65f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c23808a8b7fdad24412cb7a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마이크로 서비스가 늘어나면서 네트워크 복잡성 증가 및 공통 기능 적용(서킷브레이커, 재시도 로직, 타임아웃, 인증 등)의 요구사항 이 생김 &amp;rarr; Service Mesh
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c238015ae6edf750e00e427&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;AWS AppMesh, Istio, Linkerd 등으로 트래픽 관리, 보안, 관찰성 강화&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380bcbd6fe69343c91423&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마이크로서비스 간 통신의 복잡성 추상화&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380c6b536cc8eb5c9fbee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 디스커버리와 로드밸런싱의 고도화 및 자동화 (서비스 메시는 서비스 디스커버리를 기반으로 함)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380fe80e2fc8f1df77d8b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨테이너 애플리케이션 앞에 AWS AppMesh, Istio, Linkerd 등의 사이드카 프록시 컨테이너를 배치&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list numbers&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380458d9edf52b69b1290&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Service Mesh&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238078a968d04f972618fc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;동작 원리&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;557&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D34D3/btsNBGF5SSb/8OO9jHycUHecxJ8gAc2FLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D34D3/btsNBGF5SSb/8OO9jHycUHecxJ8gAc2FLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D34D3/btsNBGF5SSb/8OO9jHycUHecxJ8gAc2FLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD34D3%2FbtsNBGF5SSb%2F8OO9jHycUHecxJ8gAc2FLk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;735&quot; height=&quot;400&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;557&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c23808fae86d5ab7fb15f61&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list numbers&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380fea2b9c32a8a57614c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨테이너 애플리케이션으로 들어오고 나가는 모든 트래픽은 프록시 컨테이너를 통해 라우팅 되는 방식&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380f794a4cfc7caed6bfe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시 컨테이너의 역할
&lt;ul class=&quot;notion-bulleted-list numbers&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c23801ab8a6ca5fe73a6b20&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사이드카가 요청을 가로챔 &amp;rarr; 요청을 별도의 네트워크 연결로 캡슐화 &amp;rarr; 소스 프록시와 대상 프록시 간에 안전하고 암호화된 채널을 설정&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380229f35d36a9a596c06&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 간 로우 레벨 메시징을 처리&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23803fb0bdca27785928d3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서킷 브레이킹, 요청 재시도와 같은 기능을 구현하여 복원력을 높이고 서비스 성능 저하를 방지&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list numbers&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c23800e92bcc6f1181efdfa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메시 내의 모든 서비스를 추적하는 서비스 레지스트리 기능 수행&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238026bc09e0bfb0b682f4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;신규 서비스 자동 검색 기능 및 비활성 서비스 제거 기능 수행&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380129895dbc5ded33836&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지표, 로그, 분산 추적 정보와 같은 텔레메트리 데이터의 수집 및 집계&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380498921d67a3357ca6f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;데이터 영역&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380c2913beba76fa787a4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;제어 영역&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e1b8b2c1c238025a55bc88cdb39cd01&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380708ce7c4c6f4cf1873&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이러한 방식의 애플리케이션 네트워킹의 한계점&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e1b8b2c1c23801faf5bcac94c2d2ef0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Ingress와 Service Discovery, Service Mesh는 Kubernetes에서 트래픽 라우팅을 관리하는 대표적인 방식이었지만, 다음과 같은 한계점을 가지고 있었습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c23804d8508d463e988513a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c238078bfb1e105d09357b2&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Ingress의 한계&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c23808b8894f5f3459bdeb1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;HTTP, HTTPS와 같은 L7 트래픽에 최적화 되어있어 gRPC 및 TPC, UDP와 같은 비 L7 프로토콜에 대한 라우팅 기능이 제한적이었습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380e3b519f62761285833&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;고급 기능(인증, 속도 제한 정책, 고급 트래픽 관리 등)을 사용하려면 벤더별(AWS, NGINX, HAProxy 등) 사용자 정의 어노테이션이 필요하여 이식성과 표준화에 한계가 존재했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380ca8f22c7c82f764b49&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380988820e6830b2ccac3&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Service Mesh의 한계&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c238088a792fc71640f0fa7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;주로 동-서 트래픽(서비스 간 내부 통신)에 초점을 맞추어 설계되어 북-남 트래픽(외부-내부 통신)에 대한 기능이 제한적이였습니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380a9b37cda623770ab17&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Amazon EKS의 경우, VPC Peering 및 TGW가 필요 &amp;rarr; 점점 늘어나는 설정들과 네트워크 리소스들&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238087b4b2c4086a979a34&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여러 AWS 계정을 사용할 경우, 각각 교차 계정 액세스 설정이 필요 &amp;rarr; 권한 관리의 어려움&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e1b8b2c1c238019993fe8bfe386da51&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사이드카 프록시 배포가 필수적이며, 멀티 VPC 클라우드 환경에서 네트워크 복잡도가 증가하였습니다. (멀티 클러스터, 멀티 메시의 수많은 프록시 운영 및 관리의 어려움)&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380a2b1b6f576fa5a71ec&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380d7837fc1d4a5f3d929&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;또한,&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라우드 환경에서 점차 마이크로 서비스가 확장되고 인프라 구성이 복잡해짐에 따라&lt;/span&gt;&amp;nbsp;아래와 같은 요구사항도 생겨났습니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c23807d9443c86ff17fa39b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다양한 팀 간의 책임 분리(인프라 담당자, 애플리케이션 개발자, DevOps 엔지니어 등)가 필요해졌습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23809b9f5cee5271ffad82&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여러 VPC 또는 멀티 클러스터 환경에 걸친 리소스들을 일관되게 관리해야 했습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380b98ab4e79c17e5c5b2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다양한 컴퓨팅 형태(인스턴스, 컨테이너, 서버리스 등)를 통합적으로 관리할 수 있는 네트워킹 레이어가 필요했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380b387abef7968417c61&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;2&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;2&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c23800eabeff39af50f9b5d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Gateway API의 등장&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1e1b8b2c1c238052b241c523f107aefa&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이러한 한계를 극복하기 위해 SIG-NETWORK 커뮤니티에서&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://gateway-api.sigs.k8s.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Gateway API&lt;/a&gt;가 고안되었습니다. Gateway API는 다음과 같은 목표를 가지고 설계되었습니다.&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;2&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;2&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380f78018dbd59f3cd95d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;역할 기반 설계&lt;/span&gt;: 인프라 관리자, 클러스터 운영자, 애플리케이션 개발자 각각의 요구사항을 반영할 수 있도록 설계되었습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380fdae67ddb50adf00d8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;범용성&lt;/span&gt;: HTTP, HTTPS, gRPC 등 다양한 프로토콜을 지원하고 확장성 있게 설계되었습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23802cbb6dcbf3ebcbb210&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;표준화&lt;/span&gt;: Kubernetes Ingress와 같이 포터블한 표준 API가 되도록 설계되었습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380e49a78d2cb2ecd0f92&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;확장성&lt;/span&gt;: 멀티 클러스터 환경 및 다양한 VPC 간의 원활한 네트워크 통합이 가능하도록 설계되었습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380499ff6f7411b01c777&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380ab88d8c35f1b7feafc&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2.1. Gateway API의 주요 구성요소&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380bda741c1326ab669a8&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Gateway API는 계층적 구조로 설계되어&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인프라 관리자&lt;/span&gt;와&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션 개발자&lt;/span&gt;의 역할과 책임을 명확히 구분합니다. 주요 구성 요소는 다음과 같습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380fb892cedd8ba70d68d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380c28c16d00dbe109fef&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.GatewayClass&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;GatewayClass&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380dc96aaeaad658d81a2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;공통 구성을 가진 게이트웨이 집합을 정의하며, 이 클래스를 구현하는 컨트롤러에 의해 관리됩니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23807691a3cb63101b520a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;게이트웨이는 각기 다른 컨트롤러에 의해 다양한 구성으로 구현될 수 있습니다. 게이트웨이는 반드시 해당 클래스를 구현하는 컨트롤러의 이름을 포함하는 GatewayClass를 참조해야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380e8aae6c332e82f5c15&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c238050969ec52362ced407&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.Gateway&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;Gateway&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c23806e9de4e9ef2b960cd5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;외부 트래픽을 수신하고 내부 서비스로 라우팅하는 진입점을 정의합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380859db3d745254d8b52&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;하나 이상의 Route 리소스와 연결될 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c238067b22ffa897e78e57d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c23803da2d9ce048beedebd&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.HTTPRoute&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;Routes&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380ebb2e5f2aa1a7c03af&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽을 특정 서비스로 매핑하는 프로토콜 별 규칙을 정의합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380cba0e5dddf80f42e1b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://gateway-api.sigs.k8s.io/reference/spec/#httproute&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;HTTPRoute&lt;/a&gt;, &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://gateway-api.sigs.k8s.io/reference/spec/#tlsroute&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;TLSRoute&lt;/a&gt;, &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://gateway-api.sigs.k8s.io/guides/tcp/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;TCPRoute&lt;/a&gt;, &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://gateway-api.sigs.k8s.io/reference/spec/#udproute&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;UDPRoute&lt;/a&gt;, &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://gateway-api.sigs.k8s.io/reference/spec/#grpcroute_1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;GRPCRoute&lt;/a&gt; 등이 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380538459f0107cdb19b3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Gateway 리소스에 연결되어 트래픽을 대상 서비스로 전달합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380c185d6dd8319aa88ad&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380fe8210f73a9e6e83bc&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이러한 구성 요소의 관계를 도식화하면 다음과 같습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c23807ea2a3e1d6c2a838cb&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c23800bb033c2e1e4efc2da&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bX7uEi/btsNAcGgBV7/WF7GXSWe5gbXL2SGobZ0d0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bX7uEi/btsNAcGgBV7/WF7GXSWe5gbXL2SGobZ0d0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bX7uEi/btsNAcGgBV7/WF7GXSWe5gbXL2SGobZ0d0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbX7uEi%2FbtsNAcGgBV7%2FWF7GXSWe5gbXL2SGobZ0d0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;745&quot; height=&quot;652&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380ec8554d98fcaca33e3&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 계층적 구조를 통해 인프라 관리자는 GatewayClass와 Gateway를 관리하며 전체 인프라의 일관성을 유지하고, 애플리케이션 개발자는 다양한 Route를 통해 자신의 애플리케이션에 대한 세부 라우팅 규칙을 독립적으로 정의할 수 있습니다.&lt;/p&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380e7826be7e6cbdc35e2&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS는 이러한 계층적 구조를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon VPC Lattice&lt;/span&gt;와 통합하여 제공함으로써, 클라우드 네이티브 환경에서의 네트워킹 요구사항을 효과적으로 충족시킵니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238007b59eedcda52179e8&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2.2. Gateway API Controller&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380fe8070f0d7f246e9fa&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Gateway API도 다른 Kubernetes 컴포넌트와 마찬가지로 Controller를 통해 동작합니다. 여러 벤더 별 Gateway API Controller 구현체를 참조하고 싶다면&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://gateway-api.sigs.k8s.io/implementations/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;여기&lt;/a&gt;를 확인해보세요. AWS에서는&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://gateway-api.sigs.k8s.io/implementations/#amazon-elastic-kubernetes-service&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;AWS Gateway API Controller&lt;/a&gt;를 제공하고 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238077b938ced4eda7c77c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380eca3d4eb15988c518c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon VPC Lattice란&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baJdWN/btsNBAsi261/dfCENXYCOjKstYpVUY5LmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baJdWN/btsNBAsi261/dfCENXYCOjKstYpVUY5LmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baJdWN/btsNBAsi261/dfCENXYCOjKstYpVUY5LmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaJdWN%2FbtsNBAsi261%2FdfCENXYCOjKstYpVUY5LmK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;531&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;531&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c238044abb3ef38666ad41a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c23802ca684c3fcb91a9f02&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://docs.aws.amazon.com/ko_kr/vpc-lattice/latest/ug/what-is-vpc-lattice.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Amazon VPC Lattice &lt;/a&gt;는 AWS에서 제공하는 완전관리형 애플리케이션 네트워킹 서비스로, 다양한 컴퓨팅 환경에서 애플리케이션 서비스를 연결, 보호 및 모니터링하는 통합 솔루션입니다. VPC Lattice는 단일 VPC 내에서는 물론, 계정 간 여러 VPC에 걸쳐 서비스를 연결하는 데 활용할 수 있습니다.&lt;/p&gt;
&lt;figure id=&quot;og_1745681798941&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Amazon VPC Lattic란 무엇입니까? - Amazon VPC Lattice&quot; data-og-description=&quot;이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.&quot; data-og-host=&quot;docs.aws.amazon.com&quot; data-og-source-url=&quot;https://docs.aws.amazon.com/ko_kr/vpc-lattice/latest/ug/what-is-vpc-lattice.html&quot; data-og-url=&quot;https://docs.aws.amazon.com/ko_kr/vpc-lattice/latest/ug/what-is-vpc-lattice.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/btgVu7/hyYMhnjFoh/xBqcspFvXJb297ttLl9GgK/img.png?width=593&amp;amp;height=306&amp;amp;face=0_0_593_306&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/vpc-lattice/latest/ug/what-is-vpc-lattice.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.aws.amazon.com/ko_kr/vpc-lattice/latest/ug/what-is-vpc-lattice.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/btgVu7/hyYMhnjFoh/xBqcspFvXJb297ttLl9GgK/img.png?width=593&amp;amp;height=306&amp;amp;face=0_0_593_306');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Amazon VPC Lattic란 무엇입니까? - Amazon VPC Lattice&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c238020804ed49d863306d2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380229bfffc2cc9e2bb82&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;현대적 애플리케이션은 마이크로서비스 아키텍처를 통해 여러 개의 소규모 모듈형 서비스로 분할되어 개발되는 추세입니다. 이러한 접근 방식은 개발 속도와 확장성 측면에서 많은 이점을 제공하지만, 다양한 마이크로서비스 간의 효율적인 연결과 관리에 대한 새로운 네트워킹 문제를 야기합니다. Amazon VPC Lattice는 이러한 과제를 해결하기 위해 네트워크 액세스, 트래픽 관리, 모니터링에 대한 일관된 정책을 정의하여 EC2 인스턴스, EKS 컨테이너, Lambda 서버리스 함수 등 다양한 컴퓨팅 서비스 간에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;간단하고 표준화된 연결 방식을 제공&lt;/u&gt;&lt;/span&gt;합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c238061bca1f4de0437ea47&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c23805eb319e41ec3108a1d&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;3.1. Amazon VPC Lattice 주요 구성 요소&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e1b8b2c1c23809baed2f4ca150d53a6&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6tTNo/btsNB5eymHR/DIjKNgKbWtOmKTdD3ziQzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6tTNo/btsNB5eymHR/DIjKNgKbWtOmKTdD3ziQzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6tTNo/btsNB5eymHR/DIjKNgKbWtOmKTdD3ziQzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6tTNo%2FbtsNB5eymHR%2FDIjKNgKbWtOmKTdD3ziQzk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;531&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;531&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e1b8b2c1c238038877de5bf68c6b99c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Amazon VPC Lattice는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Service, Service Network, Auth Policy, Service Directory&lt;/span&gt;의 네 가지 핵심 구성 요소로 이루어져 있습니다. 각 구성 요소의 특징과 역할을 살펴보겠습니다. 자세한 내용은&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://docs.aws.amazon.com/ko_kr/vpc-lattice/latest/ug/what-is-vpc-lattice.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;이 문서&lt;/a&gt;를 참조해주세요.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c238013b850eaae787a8f33&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1e1b8b2c1c2380d6928df8ec04dac822&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 20px; margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;box-sizing: border-box;&quot;&gt;Service&lt;/span&gt;&lt;/h3&gt;
&lt;p id=&quot;block-1e1b8b2c1c23809dbe86fcca7708c196&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Service는 특정 작업이나 기능을 수행하는 독립적으로 배포가능한 소프트웨어 단위입니다. 이는 어떤 Amazon Virtual Private Cloud(VPC)나 계정에도 존재할 수 있으며, 다양한 유형의 컴퓨팅 환경(가상머신, 컨테이너, 서버리스 함수)에서 실행할 수 있습니다. 서비스 구성은 다음과 같은 요소로 이루어집니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380c99488f305717bac1a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;리스너&lt;/span&gt;&amp;nbsp;: 리스너에서는 Service가 트래픽을 받아들일 포트와 프로포콜을 정의합니다. 지원되는 프로토콜은 HTTP/1.1, HTTP/2, gRPC이며, TLS가 활성화된 Service의 경우 HTTPS도 포함됩니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23809cb299c3fe6fd8e5b9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;규칙&lt;/span&gt;&amp;nbsp;: 리스너의 기본 구성 요소로, 요청을 대상 그룹의 대상들로 전달합니다. 각 규칙은 우선 순위, 하나 이상의 작업, 그리고 리스너가 클라이언트 요청을 라우팅하는 기준이 되는 하나 이상의 조건으로 구성됩니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238048ad2ae15677cccd2b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;대상 그룹&lt;/span&gt;&amp;nbsp;: 애플리케이션이나 서비스를 실행하는 리소스들의 집합으로, 이를 대상 이라고도 합니다. 대상은 EC2 인스턴스, IP주소, Lambda 함수, 또는 Kubernetes Pod가 될 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380119714fb0c63aac1e9&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;541&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s40dS/btsNAjkVjeE/xzrNGxEUi5jyXdKFOEzkxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s40dS/btsNAjkVjeE/xzrNGxEUi5jyXdKFOEzkxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s40dS/btsNAjkVjeE/xzrNGxEUi5jyXdKFOEzkxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs40dS%2FbtsNAjkVjeE%2FxzrNGxEUi5jyXdKFOEzkxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;766&quot; height=&quot;324&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;541&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e1b8b2c1c2380b0835cddd57a04f205&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Service는 다음과 같은 특징을 갖습니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380baaae0cdcc4581ebbf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;고유한 VPC Lattice 도메인 네임 제공&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23803f8297d2b59a335220&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;리스너를 통해 들어오는 연결 처리&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238074a799f801009ef188&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;특정 경로나 헤더 값에 기반한 라우팅 규칙 정의&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380d0a2c9c8fe01a7b43b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;EC2, ECS, Lambda 등 다양한 AWS 컴퓨팅 서비스를 대상으로 설정 가능&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380b2a7c0ec2f5244bf33&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;상태 확인을 통한 트래픽 안정성 보장&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380d6bedaca77d5799e82&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1e1b8b2c1c2380ab8b84e5a8a2baa450&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 20px; margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;box-sizing: border-box;&quot;&gt;Service Network&lt;/span&gt;&lt;/h3&gt;
&lt;p id=&quot;block-1e1b8b2c1c23800998d0c0c81f28b3f1&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Service Network는 VPC Lattice의 핵심 구성 요소로, 여러 서비스를 논리적으로 그룹화하고 이들 간의 통신을 관리합니다. 하나 이상의 VPC를 Service Network에 연결하여 해당 네트워크 내의 서비스 간 통신을 가능하게 합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c238066a480df6401cf3f31&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;620&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BHdgT/btsNA0ruGYF/ysdRdB5hzPVKmHk0SOgk40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BHdgT/btsNA0ruGYF/ysdRdB5hzPVKmHk0SOgk40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BHdgT/btsNA0ruGYF/ysdRdB5hzPVKmHk0SOgk40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBHdgT%2FbtsNA0ruGYF%2FysdRdB5hzPVKmHk0SOgk40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;760&quot; height=&quot;368&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;620&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e1b8b2c1c238093bb49e1339b90bc77&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Service Network의 주요 특징은 다음과 같습니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c238084a884c9b1f7e2b680&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여러 VPC와 서비스를 단일 네트워크로 통합&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238078b641cf12f89823e4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;계정 간, 리전 간 서비스 연결 지원&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23809ab0f8c827d00d3bb7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;중앙 집중식 액세스 제어 및 모니터링 제공&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238086964eeac158b7188c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;VPC 연결을 통한 Service Network 내 서비스에 대한 접근 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380cfa091fb78455aed05&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1e1b8b2c1c2380c8b172e9b72890ba3a&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 20px; margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;box-sizing: border-box;&quot;&gt;Auth Policy&lt;/span&gt;&lt;/h3&gt;
&lt;p id=&quot;block-1e1b8b2c1c23804d8fc9e5cb549f419c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Auth Policy는 VPC Lattice 서비스에 대한 액세스를 제어하는 IAM 기반 정책입니다. 이를 통해 특정 IAM 보안 주체나 역할이 서비스에 접근할 수 있는지 여부를 세밀하게 제어할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c23802e8fbbfe14df58d697&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBS0TR/btsNAclX36A/kxkJ30zKA27QDiEeifLcT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBS0TR/btsNAclX36A/kxkJ30zKA27QDiEeifLcT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBS0TR/btsNAclX36A/kxkJ30zKA27QDiEeifLcT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBS0TR%2FbtsNAclX36A%2FkxkJ30zKA27QDiEeifLcT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;745&quot; height=&quot;386&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e1b8b2c1c2380409b63c509c7e6d6e7&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Auth Policy의 주요 기능은 다음과 같습니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c23808baa94c7abdf5648b1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;IAM 기반의 세분화된 접근 제어&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380c9b46fdb0d0679f31e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 레벨 또는 서비스 네트워크 레벨에서 적용 가능&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238075bdb8f957abd28fb3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;HTTP 메소드, 경로, 헤더 등을 기준으로 조건부 액세스 규칙 설정&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380788a27c1d9f9a8109c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;AWS 리소스 간의 안전한 통신 보장&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c23801b8d56f45d29594427&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1e1b8b2c1c2380f9a693f83a5215c982&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 20px; margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;box-sizing: border-box;&quot;&gt;Service Directory&lt;/span&gt;&lt;/h3&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380fb85e2dd8af298eba6&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Service Directory는 모든 VPC Lattice 서비스를 중앙에서 검색하고 관리할 수 있는 카탈로그입니다. 개발자와 운영팀이 사용 가능한 서비스를 쉽게 찾고 접근할 수 있도록 지원합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c238083a11ae010c05dc6d4&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;575&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xUC76/btsNAg2Kgg6/VGh7LgVYNrGZmLyTHwh2J0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xUC76/btsNAg2Kgg6/VGh7LgVYNrGZmLyTHwh2J0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xUC76/btsNAg2Kgg6/VGh7LgVYNrGZmLyTHwh2J0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxUC76%2FbtsNAg2Kgg6%2FVGh7LgVYNrGZmLyTHwh2J0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;770&quot; height=&quot;346&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;575&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e1b8b2c1c23801887c5e75f4eeabd20&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Service Directory의 핵심 기능은 다음과 같습니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380d293daf734303bcd85&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사용 가능한 모든 서비스의 중앙 집중식 카탈로그 제공&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380d0b11ad5f258fd83bf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 메타데이터 및 설명 관리&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238032ad0ed04fc4c9a242&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 검색 및 필터링 기능&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380f4b25aff8d74919a81&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;접근 가능한 서비스에 대한 가시성 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c23802d955fd4ab2380ebd5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380ec9034ce55fb71b6b7&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;3.2. Amazon VPC Lattice의 장점&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380ac9c20e27a35223344&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여러 VPC, EC2 인스턴스, 컨테이너, 서버리스로 구성한 애플리케이션의 네트워크 구성을 중앙 집중화 할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380ddad38caf4698122ef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;별도의 사이드카 프록시를 구성할 필요가 없습니다. (+ 완전 관리형 서비스)&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23802ab34edbf375639d27&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;복잡한 네트워크 구성을 단순화 해서 쉽게 사용할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238007a7affd948a7c98ca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;IAM 및 SigV4를 통해 각 애플리케이션으로의 보안 구성을 손쉽게 적용 할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380ccaf74d5da21f073c8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;CloudWatch, S3, Kinesis Data Firehose를 통해 쉽게 로깅, 트래픽 패턴 분석 등을 수행할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c23806f957dd6a629dc3151&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1e1b8b2c1c238068a0f0fee0e575f20d&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 20px; margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;사용 사례 #1 : 단일 리전의 애플리케이션 간 연결&lt;/h3&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cb3Ptg/btsNAK3AiWU/bzU6lWStJErpvyCoBbDkk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cb3Ptg/btsNAK3AiWU/bzU6lWStJErpvyCoBbDkk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cb3Ptg/btsNAK3AiWU/bzU6lWStJErpvyCoBbDkk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcb3Ptg%2FbtsNAK3AiWU%2FbzU6lWStJErpvyCoBbDkk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;752&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e1b8b2c1c23801c95bbc08315c3c3a2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;i&gt;단일 AWS 리전에서 프로덕션, 개발 및 공유 서비스 애플리케이션 네트워킹을 사용하는 일반적인 엔터프라이즈 아키텍처&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380d68d0bf5d6ccd88cf5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1e1b8b2c1c238065848de91cc8de4ce9&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 20px; margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;사용 사례 #2 : &lt;span style=&quot;box-sizing: border-box;&quot;&gt;온프레미스에서 AWS에 배포된 애플리케이션으로 접근하는 경우&lt;/span&gt;&lt;/h3&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;952&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mYvCs/btsNA75fUqy/Yj1O98kC4MLp7aXCZX6qc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mYvCs/btsNA75fUqy/Yj1O98kC4MLp7aXCZX6qc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mYvCs/btsNA75fUqy/Yj1O98kC4MLp7aXCZX6qc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmYvCs%2FbtsNA75fUqy%2FYj1O98kC4MLp7aXCZX6qc0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;762&quot; height=&quot;567&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;952&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e1b8b2c1c2380528215d15ba75c1b53&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;
&lt;div&gt;&lt;i&gt;서비스 네트워크 엔드포인트가 있는 하이브리드 인그레스 VPC를 사용하여 온프레미스에서 Prod, Dev 및 Shared 서비스의 서비스 네트워크 접근하기&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c23807f8cebe25955cb8279&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1e1b8b2c1c2380d3ac64de171293f118&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 20px; margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;사용 사례 #3 : &lt;span style=&quot;box-sizing: border-box;&quot;&gt;여러 AWS 리전에 걸친 애플리케이션 간의 연결&lt;/span&gt;&lt;/h3&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;671&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dacjqT/btsNz3P9qLq/BPr3NmZhyeteiplFEVzBhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dacjqT/btsNz3P9qLq/BPr3NmZhyeteiplFEVzBhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dacjqT/btsNz3P9qLq/BPr3NmZhyeteiplFEVzBhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdacjqT%2FbtsNz3P9qLq%2FBPr3NmZhyeteiplFEVzBhk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;671&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;671&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e1b8b2c1c238003abd8c5801004d6f7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;
&lt;div&gt;&lt;i&gt;리전 간 액티브-패시브 서비스 접속 구성&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380008fecda1ba80d62d0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1e1b8b2c1c2380209084ee4625361762&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 20px; margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;사용 사례 #3 : 다중 계정 간&lt;span style=&quot;box-sizing: border-box;&quot;&gt; 애플리케이션의 연결&lt;/span&gt;&lt;/h3&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;551&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vz9GC/btsNCASFckq/vRCxrDIN1QDoZf8gGdRC41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vz9GC/btsNCASFckq/vRCxrDIN1QDoZf8gGdRC41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vz9GC/btsNCASFckq/vRCxrDIN1QDoZf8gGdRC41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvz9GC%2FbtsNCASFckq%2FvRCxrDIN1QDoZf8gGdRC41%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;551&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;551&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e1b8b2c1c2380f08961f7b5a9960f8e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;다중 계정 간 네트워크 연결 구성&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380749757f19d115a86fe&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;3.3. 참고 자료&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380a08d2cd25eefd5d9d0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon VPC Lattice Docs :&lt;/span&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://docs.aws.amazon.com/ko_kr/vpc-lattice/latest/ug/what-is-vpc-lattice.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://docs.aws.amazon.com/ko_kr/vpc-lattice/latest/ug/what-is-vpc-lattice.html&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23806d842eedcdbca0e30a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon VPC Lattice Workshop : &lt;/span&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://catalog.workshops.aws/handsonwithvpclattice/ko-KR&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://catalog.workshops.aws/handsonwithvpclattice/ko-KR&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23807d8f9cfaae18aefc5e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link notion-page link-mention&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline; transition: background 120ms ease-in; vertical-align: middle; color: inherit; position: relative;&quot; href=&quot;https://docs.aws.amazon.com/ko_kr/vpc-lattice/latest/ug/how-it-works.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-thickness: 1px; text-decoration-color: #e9e9e7; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Amazon VPC Lattice &lt;/span&gt;VPC Lattic의 작동 방식 - Amazon VPC Lattice&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23800d94f2f3f17597fee2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link notion-page link-mention&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline; transition: background 120ms ease-in; vertical-align: middle; color: inherit; position: relative;&quot; href=&quot;https://aws.amazon.com/ko/blogs/korea/simplify-service-to-service-connectivity-security-and-monitoring-with-amazon-vpc-lattice-now-generally-available/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-thickness: 1px; text-decoration-color: #e9e9e7; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Amazon Web Services &lt;/span&gt;Amazon VPC Lattice 정식 출시 &amp;ndash; 서비스 간 연결, 보안 및 모니터링 간소화 | Amazon Web Services&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23809abb51c14a6a608976&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link notion-page link-mention&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline; transition: background 120ms ease-in; vertical-align: middle; color: inherit; position: relative;&quot; href=&quot;https://aws.amazon.com/ko/blogs/tech/amazon-vpc-vattice-modernize-and-simplify-your-enterprise-network-architectures/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-thickness: 1px; text-decoration-color: #e9e9e7; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Amazon Web Services &lt;/span&gt;Amazon VPC Lattice: 엔터프라이즈 네트워크 아키텍처의 현대화 및 단순화 | Amazon Web Services&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238067b54bc52ac20dd7e5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link notion-page link-mention&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline; transition: background 120ms ease-in; vertical-align: middle; color: inherit; position: relative;&quot; href=&quot;https://aws.amazon.com/blogs/containers/application-networking-with-amazon-vpc-lattice-and-amazon-eks/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-thickness: 1px; text-decoration-color: #e9e9e7; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;Amazon Web Services &lt;/span&gt;Application Networking with Amazon VPC Lattice and Amazon EKS | Amazon Web Services&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380f89724d764bb486da6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link notion-page link-mention&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline; transition: background 120ms ease-in; vertical-align: middle; color: inherit; position: relative;&quot; href=&quot;https://youtu.be/fRjD1JI0H5w?si=jtLssGaVfu8hnNUY&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-thickness: 1px; text-decoration-color: #e9e9e7; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #787673;&quot; class=&quot;highlighted-color color-gray&quot;&gt;AWS Events &lt;/span&gt;AWS re:Invent 2022 - [NEW] Introducing Amazon VPC Lattice: Simplifying app networking (NET215)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c23803d84d5f23bfc536628&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380788365ee6761510748&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Gateway API Controller&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380a79f43f0968013377b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.gateway-api-controller.eks.aws.dev/latest/concepts/overview/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;AWS Gateway API Controller&lt;/a&gt;는 Gateway API에 의해 정의된 사용자 지정 리소스를 확장하여 Kubernetes API를 사용하여 VPC Lattice 리소스를 생성합니다. 이 Controller가 클러스터에 설치되면 Controller는 Gateway API의 리소스(Gateway 및 Route)의 생성을 감시하고 적절한 Amazon VPC Lattice 오브젝트를 프로비저닝 합니다. 이를 통해 사용자는 커스텀 코드를 작성하거나 사이드카 프록시를 관리할 필요 없이 Kubernetes API를 사용하여 VPC Lattice Service, VPC Lattice Service Network 및 Target Group을 구성할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380efaa38dd9dfcf4d5f8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380f3a4dadec6dafec90a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS Gateway API Controller는 Amazon VPC Lattice와 통합되어 다음 작업을 수행할 수 있습니다.&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c23807692b6d631903c67f4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;VPC 및 계정 전반에 걸친 서비스 간 네트워크 연결을 원활하게 처리합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23802f9dafc632fbfe7e8c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여러 Kubernetes 클러스터에 걸쳐 있는 VPC Lattice Service를 검색합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238026b51fce9e527763e5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 간 통신의 보안을 구성하기 위한 깊이 있는 방어 전략을 구현합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23806d9268cf939b2e71fe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 간 요청/응답 트래픽을 관찰합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380088354c31855b847b9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c23803c9903ca8afb4a73a8&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS Gateway API Controller는 오픈소스 프로젝트이며, Amazon의 완전한 지원을 받고있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380859fd7d46b246fb423&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238035a9b4ee97adb43c1d&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;4.1. Gateway API 구성 요소와 VPC Lattice 오브젝트 간 매핑 관계&lt;/span&gt;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;501&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GxLkO/btsNBGlM3Ps/SQYG7rQMH5QoK83U0zrxg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GxLkO/btsNBGlM3Ps/SQYG7rQMH5QoK83U0zrxg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GxLkO/btsNBGlM3Ps/SQYG7rQMH5QoK83U0zrxg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGxLkO%2FbtsNBGlM3Ps%2FSQYG7rQMH5QoK83U0zrxg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;751&quot; height=&quot;501&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;501&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380bb8f86f781d3b76778&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380d6a9f3c9df7a6591c9&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;4.2. Amazon EKS에서 VPC Lattice로 Gateway API를 사용하기 위한 요구사항&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380579896dab287564ed8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;쿠버네티스 1.28 이상&lt;/span&gt;&amp;nbsp;필요: &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://v1-28.docs.kubernetes.io/docs/concepts/services-networking/ingress/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;공식 문서에서 v1.28부터 기존 Ingress가 Frozen 상태로 전환&lt;/a&gt;되었으며, Gateway API를 통한 현대화 아키텍처 구현이 권장&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238038bfd7d9a966f760dd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Gateway API Controller&lt;/span&gt;&amp;nbsp;설치: VPC Lattice 리소스와 쿠버네티스 API 객체 간 매핑을 처리하는 컨트롤러 배포 필요&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c238067a0bacc9b1b1a0068&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;AWS Gateway API Controller 설치 및 구성 방법에 대해서는 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.gateway-api-controller.eks.aws.dev/dev/guides/deploy/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;이 문서&lt;/a&gt;를 참조하세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-weight: 600; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;5. Simple Client to Server communication(실습)&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238047b48acee1062e49c0&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e1b8b2c1c238028b500f181a630f0bb&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380238f9fdc7e554ce1c7&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1042.97px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380729a63c2ccb054f451&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이번 실습에서는&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://aws-ia.github.io/terraform-aws-eks-blueprints/patterns/network/client-server-communication/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Amazon EKS Blueprints for Terraform : Amazon VPC Lattice - Simple Client to Server Communication&lt;/a&gt;을 활용합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380b6bec5c69f58b50350&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 패턴에서는 Terraform을 활용하여 클라이언트 애플리케이션이 한 곳에서 실행되고 서버 애플리케이션이 다른 곳에서 실행되는 두 개의 별개의 VPC를 배포합니다. 서버 애플리케이션은 EKS 클러스터 내에 배포되며 두 애플리케이션 간의 연결을 설정하는 Amazon VPC Lattice를 통해 클라이언트 애플리케이션에 노출됩니다. 또한 Amazon Route53 및 External DNS Add-on을 사용하여 노출된 서비스에 대한 사용자 지정 도메인 이름을 구성하는 방법을 보여줍니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c23803d996ee54a83e44fd6&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380279007ebdd869cae06&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;652&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dn1A6u/btsNCAFb59E/ii6KwdlakewTaDW6P4snYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dn1A6u/btsNCAFb59E/ii6KwdlakewTaDW6P4snYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dn1A6u/btsNCAFb59E/ii6KwdlakewTaDW6P4snYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdn1A6u%2FbtsNCAFb59E%2Fii6KwdlakewTaDW6P4snYK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;652&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;652&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c23807faad9cee9393526db&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.1. Terraform 코드 준비 및 프로비저닝&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380a3b6c0c69c3544fa86&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 명령을 통해 실습용 코드를 clone 해주세요. 이 프로젝트의 디렉터리는 실습하기 편한 곳으로 설정해주세요.&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380e1a240fc3ec40af706&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;crmsh&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;git clone https://github.com/aws-ia/terraform-aws-eks-blueprints.git&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;2&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380fc88bec2ce658e5193&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;터미널을 통해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;terraform-aws-eks-blueprints&lt;/span&gt; 프로젝트의 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/patterns/vpc-lattice/client-server-communication&lt;/code&gt; 디렉터리로 이동해주세요.&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e1b8b2c1c23800b8f2ce60224d41b41&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;axapta&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;cd terraform-aws-eks-blueprints/patterns/vpc-lattice/client-server-communication&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c23803798d7ecb27a0cc8e8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;main.tf&lt;/span&gt; 파일 내의 29번째 라인에서 region 값을 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ap-northeast-2&lt;/code&gt;로 수정해주세요.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380d5800ecba26165185e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/90e71af3-fe05-4529-bff6-3bcb549615bb/CleanShot_2025-04-13_at_16.34.40.png?table=block&amp;amp;id=1e1b8b2c-1c23-80d5-800e-cba26165185e&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1745748000000&amp;amp;signature=5QGYZD8moluYBNX5hHpsW33xOTfCVZBBjflLeaMJOPM&quot; alt=&quot;image&quot; width=&quot;680.99609375&quot; height=&quot;281.9983824339207&quot; /&gt;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380828ee5eb172286bf5f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 명령을 순차적으로 실행하여 실습 인프라를 프로비저닝 해주세요.&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380e49039cea2e0b65eae&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;terraform init&lt;/code&gt;&lt;/pre&gt;
Terrafrom init 수행&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380f3a2acd204529635b5&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;coq&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;terraform apply -target=&quot;module.client_vpc&quot; -auto-approve
terraform apply -target=&quot;module.cluster_vpc&quot; -auto-approve
terraform apply -target=aws_route53_zone.primary -auto-approve

terraform apply -target=&quot;module.client_sg&quot; -auto-approve
terraform apply -target=&quot;module.endpoint_sg&quot; -auto-approve

terraform apply -target=&quot;module.client&quot; -auto-approve
terraform apply -target=&quot;module.vpc_endpoints&quot; -auto-approve

terraform apply -target=&quot;module.eks&quot; -auto-approve
terraform apply -target=&quot;module.addons&quot; -auto-approve&lt;/code&gt;&lt;/pre&gt;
Terraform 모듈 프로비저닝&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238017a419c4d9ed367570&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;coq&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;terraform apply -auto-approve&lt;/code&gt;&lt;/pre&gt;
Terraform 나머지 리소스 프로비저닝&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;5&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c238076a5f4ea6dbd915d38&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;모든 인프라가 프로비저닝 완료되었으면 아래 명령을 수행하여 kubectl config 설정을 완료해주세요.&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380aca5c6da36f9d6641c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;axapta&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;aws eks update-kubeconfig --name client-server-communication --alias client-server-communication --region ap-northeast-2&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;6&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380799fc4d850335695ca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 명령을 수행하여 Amazon EKS 엔드포인트 요청이 정상적으로 수신되는지 확인해보세요.&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e1b8b2c1c238043b2c6cd2d6492e261&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl get po -A

NAMESPACE                           NAME                                                              READY   STATUS    RESTARTS      AGE
apps                                server-6d44dd47-hhgpx                                             1/1     Running   0             3m12s
apps                                server-6d44dd47-q29nw                                             1/1     Running   0             3m12s
aws-application-networking-system   aws-gateway-api-controller-aws-gateway-controller-chart-8578sk5   1/1     Running   0             17h
aws-application-networking-system   aws-gateway-api-controller-aws-gateway-controller-chart-85glmt4   1/1     Running   0             17h
external-dns                        external-dns-555c676b8-8786s                                      1/1     Running   2 (17h ago)   17h
kube-system                         aws-node-9vpwb                                                    2/2     Running   0             17h
kube-system                         aws-node-d5zsf                                                    2/2     Running   0             17h
kube-system                         aws-node-ss42q                                                    2/2     Running   0             17h
kube-system                         coredns-586b798467-84nw4                                          1/1     Running   0             17h
kube-system                         coredns-586b798467-nx6t9                                          1/1     Running   0             17h
kube-system                         kube-proxy-c4sx2                                                  1/1     Running   0             17h
kube-system                         kube-proxy-hb2gk                                                  1/1     Running   0             17h
kube-system                         kube-proxy-sll4l                                                  1/1     Running   0             17h&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380c5a31bd6a4d50fffd8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380409b36f1c0653d61f8&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.2. Terraform 코드 살펴보기&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e1b8b2c1c238040af41ec52014699d3&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 그림과 같이 IDE를 통해, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;terraform-aws-eks-blueprints &lt;/span&gt;디렉토리를 엽니다.&lt;/p&gt;
&lt;p id=&quot;block-1e1b8b2c1c23801891d0e90ff6e5d372&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이후 페이지 왼쪽 메뉴바의&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;terraform-aws-eks-blueprints&lt;/code&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;patterns&lt;/code&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;vpc-lattice&lt;/code&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;client-server-communication&lt;/code&gt;&amp;nbsp;순서로 폴더를 엽니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;890&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zu8jB/btsNAHzlFzQ/eKSnWDVAmRKDuzZ5hl9Tc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zu8jB/btsNAHzlFzQ/eKSnWDVAmRKDuzZ5hl9Tc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zu8jB/btsNAHzlFzQ/eKSnWDVAmRKDuzZ5hl9Tc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzu8jB%2FbtsNAHzlFzQ%2FeKSnWDVAmRKDuzZ5hl9Tc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;890&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;890&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e1b8b2c1c2380bd9b89c06c0fdc474c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c23800b8ac1d0181ec7f3b0&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;client.tf 살펴보기&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238072b20de474cca0b4c4&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;eks.tf 살펴보기&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c23807e9660cb361383db7b&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;lattice.tf 살펴보기&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238066a1f2c1675b0d9e0b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380369028c7aacd9002ad&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1015px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1e1b8b2c1c23802eb0c3d6c184a36d35&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Terraform 용어 가이드&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c238090b8a3f1182ead3eb3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모듈(module)&lt;/span&gt;&amp;nbsp;: 재사용 가능한 Terraform 코드 블록으로, 여러 리소스를 그룹화하여 하나의 템플릿으로 관리할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c238091aa7ad25877865810&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;리소스(resource)&lt;/span&gt;&amp;nbsp;: Terraform의 핵심 구성 요소로, 실제 인프라 리소스를 생성하거나 관리합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380e5be0cd13766371d16&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터(data)&lt;/span&gt;&amp;nbsp;: 이미 존재하는 인프라 리소스나 다른 Terraform 코드에서 생성된 리소스 정보를 가져오는 데 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380ad82b9d680b54ff29a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238004b2b7f414789979c4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.3. 프로비저닝 된 인프라 확인&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380799732f3e9c4cc52d1&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Terraform을 통해 어떤 인프라가 구성되었는지 확인해보겠습니다.&lt;/p&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1e1b8b2c1c2380c68738cbf526f1352c&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 20px; margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;VPC&lt;/h3&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380a29127fff00468d720&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 그림을 따라&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://ap-northeast-2.console.aws.amazon.com/vpcconsole/home?region=ap-northeast-2#vpcs:&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;VPC 콘솔&amp;nbsp;&lt;/a&gt;로 이동합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c23801d94f3d630aee34bd7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c23807a85d4c4e8cf9de6b8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccbsfn/btsNBL1OCKd/qqlj2sZjbkrOOpfh5YiZ51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccbsfn/btsNBL1OCKd/qqlj2sZjbkrOOpfh5YiZ51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccbsfn/btsNBL1OCKd/qqlj2sZjbkrOOpfh5YiZ51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fccbsfn%2FbtsNBL1OCKd%2Fqqlj2sZjbkrOOpfh5YiZ51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;682&quot; height=&quot;168&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;168&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380c8a41ac69750d385a0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;그 다음, 왼쪽의&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Your VPCs&lt;/span&gt;&amp;nbsp;메뉴를 클릭하여 VPC 목록을 확인합니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tQLNp/btsNz8DYD7U/d8DOQk4xRITUj94NaAxwwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tQLNp/btsNz8DYD7U/d8DOQk4xRITUj94NaAxwwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tQLNp/btsNz8DYD7U/d8DOQk4xRITUj94NaAxwwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtQLNp%2FbtsNz8DYD7U%2Fd8DOQk4xRITUj94NaAxwwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;370&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e1b8b2c1c2380fa911be057cc874920&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/befvkD/btsNCBD7JFh/HfshN4gjqFczEONqXdRHG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/befvkD/btsNCBD7JFh/HfshN4gjqFczEONqXdRHG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/befvkD/btsNCBD7JFh/HfshN4gjqFczEONqXdRHG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbefvkD%2FbtsNCBD7JFh%2FHfshN4gjqFczEONqXdRHG1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;131&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;131&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380c7a4ebca7214ba89fe&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380ac8943c88a3ecd6c94&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 내 실습환경 캡쳐화면&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380ecb6d9d0d8fca98f9f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380ddb61ac56a71d64c0c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;client vpc&lt;/span&gt;가 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;10.1.0.0/16&lt;/code&gt; CIDR 주소 범위로 구성되어 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23804eb438e9279aa196d1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;cluster vpc&lt;/span&gt;가 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;10.0.0.0/16&lt;/code&gt; CIDR 주소 범위로 구성되어 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c23808c83e9edd23bbf18fa&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1e1b8b2c1c2380d7be55c70bfc7d8a87&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 20px; margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;Subnets&lt;/h3&gt;
&lt;p id=&quot;block-1e1b8b2c1c238045b19ed48212d18422&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;서브넷도 함께 확인해보겠습니다. 왼쪽 메뉴의&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Subnets&lt;/span&gt;&amp;nbsp;메뉴를 클릭하여 서브넷 목록을 확인합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380719740c9a6870d46f4&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23806eaa76cf4343107416&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btg2a8/btsNAOLE8Rx/qJ2kuIaLxfnMsEO5GKhrgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btg2a8/btsNAOLE8Rx/qJ2kuIaLxfnMsEO5GKhrgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btg2a8/btsNAOLE8Rx/qJ2kuIaLxfnMsEO5GKhrgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbtg2a8%2FbtsNAOLE8Rx%2FqJ2kuIaLxfnMsEO5GKhrgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;377&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1e2b8b2c1c23801597a3fee8251c27f0&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uXG1t/btsNCASJvPt/FEwaawgkHjpKKJ2JQkUjHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uXG1t/btsNCASJvPt/FEwaawgkHjpKKJ2JQkUjHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uXG1t/btsNCASJvPt/FEwaawgkHjpKKJ2JQkUjHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuXG1t%2FbtsNCASJvPt%2FFEwaawgkHjpKKJ2JQkUjHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;293&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;293&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c2380549b6bdd8b0689e252&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 내 실습 캡쳐 화면&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23806991fdf7970066a360&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380b4b574cf63d375a73d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;client vpc&lt;/span&gt;의 서브넷은 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;private subnet 3개&lt;/code&gt;로 구성되어 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23808f824df91d207d25f4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;cluster vpc&lt;/span&gt;의 서브넷은 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;public subnet 3개&lt;/code&gt;, &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;private subnet 3개&lt;/code&gt;로 구성되어 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c23808ea310ea9c866f73dc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1e1b8b2c1c238024bc2cd1e866cb8f3e&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 20px; margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;구성된 워크로드 확인&lt;/h3&gt;
&lt;p id=&quot;block-1e1b8b2c1c238068a733e9613b18594a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이어서 테스트를 수행할 대상인 워크로드를 한번 확인해보겠습니다. 아래 그림을 따라&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://ap-northeast-2.console.aws.amazon.com/ec2/home?region=ap-northeast-2#Instances:&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;EC2 콘솔&amp;nbsp;&lt;/a&gt;로 이동합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c238016ad1ee8d314e00d07&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238095a424f9848de7da66&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQQhGS/btsNAdefb5Q/v1vzAB157RNyBwvJ5RMDAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQQhGS/btsNAdefb5Q/v1vzAB157RNyBwvJ5RMDAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQQhGS/btsNAdefb5Q/v1vzAB157RNyBwvJ5RMDAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQQhGS%2FbtsNAdefb5Q%2Fv1vzAB157RNyBwvJ5RMDAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;448&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;448&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380bea65fdad1eb3fef1b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;그 다음, 왼쪽의&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Instances&lt;/span&gt;&amp;nbsp;메뉴를 클릭하여 EC2 목록을 확인합니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FFLz1/btsNAOLE9t5/AxQCknOXpfh2eCK7QFGFN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FFLz1/btsNAOLE9t5/AxQCknOXpfh2eCK7QFGFN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FFLz1/btsNAOLE9t5/AxQCknOXpfh2eCK7QFGFN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFFLz1%2FbtsNAOLE9t5%2FAxQCknOXpfh2eCK7QFGFN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;400&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e1b8b2c1c2380d796b7ff6fb9738bb1&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380d69ce2ef26cffa00cb&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/esIevo/btsNAISvVd2/OwdmWTKUee093czHDBLIn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/esIevo/btsNAISvVd2/OwdmWTKUee093czHDBLIn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/esIevo/btsNAISvVd2/OwdmWTKUee093czHDBLIn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FesIevo%2FbtsNAISvVd2%2FOwdmWTKUee093czHDBLIn1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;230&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c23800d92a7cc10b03b5d0c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 내 실습 캡쳐 화면&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c238090abc3f31b5dc33c7c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;client&lt;/span&gt; 측 워크로드로 1개의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ec2 인스턴스&lt;/span&gt;가 구성되어 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23808bb746faef41c977db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;cluster&lt;/span&gt; 측 워크로드로 3개의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ec2 인스턴스(워커 노드)&lt;/span&gt;가 구성되어 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c238020a010ebc1b1ad4256&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380b987cbedac7d30e471&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래와 같이 kubectl 명령을 수행하면 EKS cluster의 워커 노드를 확인해볼 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380c3ab68eab5dbed4d4f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl get nodes

NAME                          STATUS   ROLES    AGE   VERSION
ip-10-0-21-217.ec2.internal   Ready    &amp;lt;none&amp;gt;   17h   v1.30.9-eks-5d632ec
ip-10-0-37-205.ec2.internal   Ready    &amp;lt;none&amp;gt;   17h   v1.30.9-eks-5d632ec
ip-10-0-7-174.ec2.internal    Ready    &amp;lt;none&amp;gt;   17h   v1.30.9-eks-5d632ec&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380d480b5c458ebc743d8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c23807d8928e33dd71e3cd1&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.4. VPC Lattice를 통한 Client to Server 통신 테스트&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380bf86bed3f78fad6880&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;간단한 테스트를 통해 client 워크로드에서 cluster의 워크로드로 통신이 가능한지 한번 테스트 해보겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c238040a113cdffa1fd1173&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1e1b8b2c1c23809ab090ec3713d23f94&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 20px; margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;client 서버에 ssh 접속&lt;/h3&gt;
&lt;p id=&quot;block-1e1b8b2c1c238055af0ef144424bba25&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 그림과 같이&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;client&lt;/span&gt;라는 이름의 EC2 인스턴스를 선택하고, 상단의&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Connect&lt;/span&gt;&amp;nbsp;버튼을 클릭합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380aeab74ff4b53697913&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380d6ac68d3df9ea3c10e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zhtIX/btsNBEImvtB/35nyuAk5fivkki86MmLFmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zhtIX/btsNBEImvtB/35nyuAk5fivkki86MmLFmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zhtIX/btsNBEImvtB/35nyuAk5fivkki86MmLFmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzhtIX%2FbtsNBEImvtB%2F35nyuAk5fivkki86MmLFmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;572&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;572&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c238031a847dcda4546a267&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;그 다음,&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Session Manager&lt;/span&gt;&amp;nbsp;탭을 클릭하고, 하단의&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Conenct&lt;/span&gt;&amp;nbsp;버튼을 클릭합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c23805dbda5cca0ad894245&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c23800c8191f0855a5ec13d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;691&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Qoekb/btsNCqpgAXH/7SmoBU2qZGgUSAiz4KikCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Qoekb/btsNCqpgAXH/7SmoBU2qZGgUSAiz4KikCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Qoekb/btsNCqpgAXH/7SmoBU2qZGgUSAiz4KikCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQoekb%2FbtsNCqpgAXH%2F7SmoBU2qZGgUSAiz4KikCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;691&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;691&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380549fcac1d7ac8d75c8&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래와 같이 터미널 화면으로 접속되면 성공입니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;491&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ke7PI/btsNBIcUMUi/D5tZQK3xsx7ugohRSw3gxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ke7PI/btsNBIcUMUi/D5tZQK3xsx7ugohRSw3gxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ke7PI/btsNBIcUMUi/D5tZQK3xsx7ugohRSw3gxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKe7PI%2FbtsNBIcUMUi%2FD5tZQK3xsx7ugohRSw3gxK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;491&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;491&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e1b8b2c1c238003a625d1dd16bf533f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238098aa04f1df529f3148&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLLPBC/btsNBcyynbM/Rj5NWWV9TuPh3okbiWt0w1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLLPBC/btsNBcyynbM/Rj5NWWV9TuPh3okbiWt0w1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLLPBC/btsNBcyynbM/Rj5NWWV9TuPh3okbiWt0w1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLLPBC%2FbtsNBcyynbM%2FRj5NWWV9TuPh3okbiWt0w1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;142&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c238028975bc54bd09d9fea&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 내 실습 캡쳐 화면&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c23800c89dadee3f54e5965&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1015px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1e1b8b2c1c238017bac9c900962bfd8c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Tips&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380558492fbfe513c16c1&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS에서는&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/session-manager.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Systems Manager Session Manager&amp;nbsp;&lt;/a&gt;라는 기능을 통해 인바운드 포트를 열고 배스천 호스트를 유지 관리하거나 SSH 키를 관리할 필요 없이 IAM 기반으로 EC2 인스턴스에 안전하게 쉘에 접속할 수 있습니다.&lt;/p&gt;
&lt;p id=&quot;block-1e1b8b2c1c238045ac52e067409692d6&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;참고 : &lt;a style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline-flex; transition: background 120ms ease-in; vertical-align: middle; color: inherit; align-items: center; position: relative;&quot; href=&quot;https://app.super.so/site/3f49453f-f80d-46f6-a6b0-c6b6049c7545?path=13cb5bede640809c9d70e4ce29d4b0c7&quot;&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-thickness: 1px; text-decoration-color: #e9e9e7; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot;&gt;AWS Systems Manager Session Manager를 사용하여 안전하게 인스턴스 액세스 제어하기&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238090a9e1da9ffcc582f4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.5. client 애플리케이션에서 cluster 애플리케이션으로 http 요청 전송&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e1b8b2c1c238052ab30f2ffc454efcc&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;client에서 cluster의 server pod로 요청이 잘 수행되는지 명령을 수행해보겠습니다. 이 과정에서 VPC Lattice로 구성된 서비스 네트워크를 사용해보겠습니다.&lt;/p&gt;
&lt;p id=&quot;block-1e1b8b2c1c23800fb06cff08801dde3c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 그림처럼 한 쪽에는&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;client의 터미널&lt;/span&gt;을, 다른 한 쪽에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kubectl 명령을 수행할 터미널&lt;/span&gt;을 준비해주세요.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380d5a1a2c7745b7a0683&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c23809ebd47feca4c46f943&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPZfag/btsNAc0K3Mg/8KDBa4sVyRK9SyUncYzKMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPZfag/btsNAc0K3Mg/8KDBa4sVyRK9SyUncYzKMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPZfag/btsNAc0K3Mg/8KDBa4sVyRK9SyUncYzKMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPZfag%2FbtsNAc0K3Mg%2F8KDBa4sVyRK9SyUncYzKMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;724&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;724&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380a2abc7fd3bef8e7947&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;client&lt;/span&gt;의 터미널에서는 아래 명령을 수행하여 네트워크 통신 테스트를 수행합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380ad9f67c52ef26bce27&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;curl -i http://server.example.com

HTTP/1.1 200 OK
date: Sun, 27 Apr 2025 01:56:45 GMT
content-length: 52
content-type: text/plain; charset=utf-8

Requsting to Pod(server-6d44dd47-hhgpx): server pod&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23807e8334d275f37a0dc4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c23808d8ebdf3c919ca5265&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 kubectl 명령을 통해 server pod의 애플리케이션 로그를 실시간으로 모니터링 하겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c23805e9612e6d7b88c1a5a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;elixir&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl logs -f deployment/server -n apps --all-containers=true --since=1m

...
71.197 map[] map[] &amp;lt;nil&amp;gt; map[] 169.254.171.197:3547 / &amp;lt;nil&amp;gt; &amp;lt;nil&amp;gt; &amp;lt;nil&amp;gt; 0xc000198e80})
2025/04/27 01:56:45 Receiving %!(EXTRA *http.Request=&amp;amp;{GET / HTTP/1.1 1 1 map[Accept:[*/*] User-Agent:[curl/8.3.0] X-Amzn-Lattice-Network:[SourceVpcArn=arn:aws:ec2:us-east-1:517206134011:vpc/vpc-02814df366a2fe53c] X-Amzn-Lattice-Target:[ServiceArn=arn:aws:vpc-lattice:us-east-1:517206134011:service/svc-0c7363794cfdb9bd4; ServiceNetworkArn=arn:aws:vpc-lattice:us-east-1:517206134011:servicenetwork/sn-0a9c2d300e05d3283; TargetGroupArn=arn:aws:vpc-lattice:us-east-1:517206134011:targetgroup/tg-0d49bf394bda5151b] X-Amzn-Source-Vpc:[vpc-02814df366a2fe53c] X-Forwarded-For:[10.1.5.171]] {} &amp;lt;nil&amp;gt; 0 [] false server.example.com map[] map[] &amp;lt;nil&amp;gt; map[] 169.254.171.199:17042 / &amp;lt;nil&amp;gt; &amp;lt;nil&amp;gt; &amp;lt;nil&amp;gt; 0xc000198f40})
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238090bcead84f97aee376&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380fda5acd477512033d7&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;결과는 아래와 같습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380adab2bfc7a7d67b351&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380fa96f3e1f1b4148d05&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3VGVi/btsNB9g3JLC/BRZqibHZLBXK8yR1qljZgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3VGVi/btsNB9g3JLC/BRZqibHZLBXK8yR1qljZgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3VGVi/btsNB9g3JLC/BRZqibHZLBXK8yR1qljZgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3VGVi%2FbtsNB9g3JLC%2FBRZqibHZLBXK8yR1qljZgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;724&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;724&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380f4ab9dc6253f2bb973&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;동작하는 모습&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c23808c91b8cad22253e815&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c23806fa27af21865c73ef1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;453&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccSL4G/btsNAZlVgys/CCUShhgSqKGDPIPKMZbiZK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccSL4G/btsNAZlVgys/CCUShhgSqKGDPIPKMZbiZK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccSL4G/btsNAZlVgys/CCUShhgSqKGDPIPKMZbiZK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/ccSL4G/btsNAZlVgys/CCUShhgSqKGDPIPKMZbiZK/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;453&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;453&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380878993c84eda4e7339&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;어떻게 이런 동작이 가능한걸까요? client의 터미널에서 아래와 같이 nslookup 명령을 수행해보겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380a1808addc57fbb951c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;nslookup server.example.com

Server:         10.1.0.2
Address:        10.1.0.2#53

Non-authoritative answer:
server.example.com      canonical name = server-apps-0c7363794cfdb9bd4.7d67968.vpc-lattice-svcs.us-east-1.on.aws.
Name:   server-apps-0c7363794cfdb9bd4.7d67968.vpc-lattice-svcs.us-east-1.on.aws
Address: 169.254.171.161
Name:   server-apps-0c7363794cfdb9bd4.7d67968.vpc-lattice-svcs.us-east-1.on.aws
Address: fd00:ec2:80::a9fe:aba1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c23805cafe6fd917b4ea5d0&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;dig server.example.com

; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.13.11 &amp;lt;&amp;lt;&amp;gt;&amp;gt; server.example.com
;; global options: +cmd
;; Got answer:
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR, id: 43377
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;server.example.com.            IN      A

;; ANSWER SECTION:
server.example.com.     300     IN      CNAME   server-apps-0c7363794cfdb9bd4.7d67968.vpc-lattice-svcs.us-east-1.on.aws.
server-apps-0c7363794cfdb9bd4.7d67968.vpc-lattice-svcs.us-east-1.on.aws. 60 IN A 169.254.171.161

;; Query time: 3 msec
;; SERVER: 10.1.0.2#53(10.1.0.2)
;; WHEN: Sun Apr 27 01:57:52 UTC 2025
;; MSG SIZE  rcvd: 148&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c23809f89cbed47e8b1755b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;즉, Amazon VPC Lattice의 네트워크 구성을 통해서 이런 환경이 구성된 건데요, 한번 VPC Lattice의 구성된 내용을 자세히 살펴보겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380888134c0952a0beba0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238033b2c6d78a9590a566&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.6. Amazon VPC Lattice 확인&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e1b8b2c1c23804cbe95e5bf8b9ccb41&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 그림과 같이&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://ap-northeast-2.console.aws.amazon.com/vpcconsole/home?region=ap-northeast-2#vpcs:&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;VPC 콘솔&amp;nbsp;&lt;/a&gt;로 다시 접근합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380409d0de5df2f303dc2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380fbb3f5d093c6edb173&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KwBXT/btsNAgBRCil/EPghrH4pcGQPutf36tMO10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KwBXT/btsNAgBRCil/EPghrH4pcGQPutf36tMO10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KwBXT/btsNAgBRCil/EPghrH4pcGQPutf36tMO10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKwBXT%2FbtsNAgBRCil%2FEPghrH4pcGQPutf36tMO10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;682&quot; height=&quot;168&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;168&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c23807fbd62e90bff8ba47a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;그 다음, 왼쪽 메뉴바에서&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PrivateLink and Lattice&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Lattice services&lt;/span&gt;&amp;nbsp;를 찾아 클릭합니다.&lt;/p&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380dc93f7ce87305e19a4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 아래와 같이 VPC Lattice Service를 조회할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c238026bee7d43c44846998&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380f3877aeea363da5e92&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y8aWz/btsNAVw5yn3/sOf44QgUDifEFeKOlMakjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y8aWz/btsNAVw5yn3/sOf44QgUDifEFeKOlMakjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y8aWz/btsNAVw5yn3/sOf44QgUDifEFeKOlMakjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY8aWz%2FbtsNAVw5yn3%2FsOf44QgUDifEFeKOlMakjk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;506&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;506&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNpDxA/btsNB8h6IoE/xgStedreO62vba3yYIUCuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNpDxA/btsNB8h6IoE/xgStedreO62vba3yYIUCuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNpDxA/btsNB8h6IoE/xgStedreO62vba3yYIUCuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNpDxA%2FbtsNB8h6IoE%2FxgStedreO62vba3yYIUCuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;382&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;382&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c2380feb3bff478ca6a1a41&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 내 실습 화면 캡쳐&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380219a94f2cf486c07f8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380c2ac42d312b4a9952d&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.7. Amazon VPC Lattice Target Group 확인&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e1b8b2c1c238034a5e5cb9d4d294fd6&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;VPC Lattice Service의 세부 항목 중,&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Routing&lt;/span&gt;&amp;nbsp;섹션을 클릭하면 아래와 같은 Listener 규칙과 함께 대상 그룹을 확인할 수 있습니다. 대상 그룹의 세부 내용을 보기 위해서 아래 그림과 같이&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Listener rules&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Action&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Forward to&lt;/span&gt;&amp;nbsp;순서로 찾아 대상 그룹을 클릭합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c23801b8131fbe3bc08f4a6&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23806ca135e7a00c15eeb6&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1267&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZwVKH/btsNB6YSWCs/AJuvNh9flBwwqLlK4UQ1Y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZwVKH/btsNB6YSWCs/AJuvNh9flBwwqLlK4UQ1Y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZwVKH/btsNB6YSWCs/AJuvNh9flBwwqLlK4UQ1Y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZwVKH%2FbtsNB6YSWCs%2FAJuvNh9flBwwqLlK4UQ1Y1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1267&quot; height=&quot;908&quot; data-origin-width=&quot;1267&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q4RMk/btsNCcSjahk/zQp1vyL3LIOEMqLxfGXieK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q4RMk/btsNCcSjahk/zQp1vyL3LIOEMqLxfGXieK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q4RMk/btsNCcSjahk/zQp1vyL3LIOEMqLxfGXieK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ4RMk%2FbtsNCcSjahk%2FzQp1vyL3LIOEMqLxfGXieK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;374&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c23801cbf8fcad5935565dd&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 내 실습 화면 캡쳐&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c238090aef1fe49f08ce028&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380f7a759c0f884968e57&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래는 대상 그룹 상세 페이지 입니다. 여기의&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Registered targets&lt;/span&gt;&amp;nbsp;섹션을 보면&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IP address&lt;/span&gt;와&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Port 번호&lt;/span&gt;를 통해 VPC Lattice Service로의 라우팅 대상을 안내하고 있습니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1264&quot; data-origin-height=&quot;746&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYF28R/btsNBcrNREL/qp3XOGxLAlXC9k62pPbbnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYF28R/btsNBcrNREL/qp3XOGxLAlXC9k62pPbbnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYF28R/btsNBcrNREL/qp3XOGxLAlXC9k62pPbbnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYF28R%2FbtsNBcrNREL%2Fqp3XOGxLAlXC9k62pPbbnk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1264&quot; height=&quot;746&quot; data-origin-width=&quot;1264&quot; data-origin-height=&quot;746&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e1b8b2c1c2380beafbbedd5b61151c1&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238012b171fd1f6802f83d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEEcYL/btsNBy9bmOL/coDoGuJD3FM7SzfB2iRZQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEEcYL/btsNBy9bmOL/coDoGuJD3FM7SzfB2iRZQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEEcYL/btsNBy9bmOL/coDoGuJD3FM7SzfB2iRZQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEEcYL%2FbtsNBy9bmOL%2FcoDoGuJD3FM7SzfB2iRZQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;464&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c23803cb924ec33597a0d99&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 내 실습 화면 캡쳐&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380d49a29d9e538096796&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380569b4ed624331b6021&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 kubectl 명령을 수행하면, 해당 IP address와 일치하는 server pod의 IP 목록을 조회할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c23807bb764ccb01e82d5e9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 위에서 vpc lattice의 tagrget groups의 registered targets에 있는 ip list와 일치!!
kubectl get po -n apps -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP            NODE                          NOMINATED NODE   READINESS GATES
server-6d44dd47-hhgpx   1/1     Running   0          13m   10.0.32.211   ip-10-0-37-205.ec2.internal   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;
server-6d44dd47-q29nw   1/1     Running   0          13m   10.0.11.118   ip-10-0-7-174.ec2.internal    &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380bfa533c595b84c59a1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380afbc88da456f9d45fc&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이어서 아래 명령을 수행하면, server pod에서 사용하는 service의 정보 및 Port 번호를 조회할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380abb012f7762572ec21&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# 위에서 vpc lattice의 tagrget groups의 registered targets에 Port와 일치!!
kubectl get svc -n apps

NAME     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
server   ClusterIP   172.20.195.132   &amp;lt;none&amp;gt;        8090/TCP   14m&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c23806eb960cbb0fcce0642&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이를 통해 VPC Lattice로 구성된 DNS 엔드포인트는 EKS 클러스터 내의 server pod로 라우팅 된다는 것을 알 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380a1b418c3ad4c127c54&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238000a9efdb7eb806d02f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.8. AWS Gateway API Controller의 동작 체크&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380dfa6c8e0669a19c295&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 VPC Lattice를 통해 EKS 클러스터 내의 server pod로 라우팅 할 수 있는 환경을 구성하기 위해서는 EKS 클러스터 내에 GatewayClass, Gateway, Route 리소스를 생성해야 합니다.&lt;/p&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380bf886cc6b44b33711e&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS Gateway API Controller는 생성된 GatewayClass, Gateway, Route 리소스를 참조하여 필요한 VPC Lattice 네트워크 환경을 구성하게 됩니다.&lt;/p&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380ea9012d6e6d3694df8&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 kubectl 명령을 수행하여, AWS Gateway API Controller의 로그를&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;lattice.log&lt;/span&gt;라는 파일로 저장합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c23800c8091c3ae9bb764a9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;gams&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl logs deployment/aws-gateway-api-controller-aws-gateway-controller-chart -n aws-application-networking-system --all-containers=true &amp;gt; lattice.log&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380ab86ced67bc3bf632c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c238093ae93f6c48de21f4b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 아래의 vi 명령을 통해 로그를 조회하면, AWS Gateway API Controller의 동작을 확인 해볼 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c238059a379cb659212719a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vbscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;vi lattice.log

# reconcile 동작
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.781Z&quot;,&quot;logger&quot;:&quot;controller.service&quot;,&quot;caller&quot;:&quot;controllers/service_controller.go:76&quot;,&quot;msg&quot;:&quot;reconcile&quot;,&quot;name&quot;:&quot;server&quot;}
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.781Z&quot;,&quot;logger&quot;:&quot;controller.service&quot;,&quot;caller&quot;:&quot;controllers/service_controller.go:97&quot;,&quot;msg&quot;:&quot;reconciled&quot;,&quot;name&quot;:&quot;server&quot;}
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.798Z&quot;,&quot;logger&quot;:&quot;controller.gateway&quot;,&quot;caller&quot;:&quot;controllers/gateway_controller.go:122&quot;,&quot;msg&quot;:&quot;reconcile&quot;,&quot;name&quot;:&quot;my-services&quot;}
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.798Z&quot;,&quot;logger&quot;:&quot;controller.gateway&quot;,&quot;caller&quot;:&quot;controllers/gateway_controller.go:152&quot;,&quot;msg&quot;:&quot;GatewayClass is not found&quot;,&quot;name&quot;:&quot;my-services&quot;,&quot;gwclass&quot;:&quot;default/amazon-vpc-lattice&quot;}
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.798Z&quot;,&quot;logger&quot;:&quot;controller.gateway&quot;,&quot;caller&quot;:&quot;controllers/gateway_controller.go:133&quot;,&quot;msg&quot;:&quot;reconciled&quot;,&quot;name&quot;:&quot;my-services&quot;}
...
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.805Z&quot;,&quot;logger&quot;:&quot;controller.gateway&quot;,&quot;caller&quot;:&quot;controllers/gateway_controller.go:122&quot;,&quot;msg&quot;:&quot;reconcile&quot;,&quot;name&quot;:&quot;my-services&quot;}
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.805Z&quot;,&quot;logger&quot;:&quot;controller.gateway-class&quot;,&quot;caller&quot;:&quot;controllers/gatewayclass_controller.go:59&quot;,&quot;msg&quot;:&quot;reconcile&quot;,&quot;name&quot;:&quot;amazon-vpc-lattice&quot;}
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.816Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;controllers/route_controller.go:152&quot;,&quot;msg&quot;:&quot;reconcile&quot;,&quot;name&quot;:&quot;server&quot;}
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.816Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;controllers/route_controller.go:265&quot;,&quot;msg&quot;:&quot;Found aws-vpc-lattice for Route for server, apps&quot;}
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.816Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;controllers/route_controller.go:311&quot;,&quot;msg&quot;:&quot;reconcile, adding or updating&quot;,&quot;name&quot;:&quot;server&quot;}
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.816Z&quot;,&quot;logger&quot;:&quot;runtime.events&quot;,&quot;caller&quot;:&quot;recorder/recorder.go:104&quot;,&quot;msg&quot;:&quot;Adding/Updating Reconcile&quot;,&quot;type&quot;:&quot;Normal&quot;,&quot;object&quot;:{&quot;kind&quot;:&quot;HTTPRoute&quot;,&quot;namespace&quot;:&quot;apps&quot;,&quot;name&quot;:&quot;server&quot;,&quot;uid&quot;:&quot;febc3797-a6fc-4020-9a7f-b036f6cbbaea&quot;,&quot;apiVersion&quot;:&quot;gateway.networking.k8s.io/v1beta1&quot;,&quot;resourceVersion&quot;:&quot;212887&quot;},&quot;reason&quot;:&quot;Reconcile&quot;}
...

# gateway 생성
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.805Z&quot;,&quot;logger&quot;:&quot;controller.gateway&quot;,&quot;caller&quot;:&quot;eventhandlers/gatewayclass.go:59&quot;,&quot;msg&quot;:&quot;Found matching gateway, my-services-apps&quot;}
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.805Z&quot;,&quot;logger&quot;:&quot;controller.gateway&quot;,&quot;caller&quot;:&quot;controllers/gateway_controller.go:122&quot;,&quot;msg&quot;:&quot;reconcile&quot;,&quot;name&quot;:&quot;my-services&quot;}
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.805Z&quot;,&quot;logger&quot;:&quot;controller.gateway-class&quot;,&quot;caller&quot;:&quot;controllers/gatewayclass_controller.go:59&quot;,&quot;msg&quot;:&quot;reconcile&quot;,&quot;name&quot;:&quot;amazon-vpc-lattice&quot;}
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.816Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;controllers/route_controller.go:152&quot;,&quot;msg&quot;:&quot;reconcile&quot;,&quot;name&quot;:&quot;server&quot;}
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.816Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;controllers/route_controller.go:265&quot;,&quot;msg&quot;:&quot;Found aws-vpc-lattice for Route for server, apps&quot;}
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.816Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;controllers/route_controller.go:311&quot;,&quot;msg&quot;:&quot;reconcile, adding or updating&quot;,&quot;name&quot;:&quot;server&quot;}
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.816Z&quot;,&quot;logger&quot;:&quot;runtime.events&quot;,&quot;caller&quot;:&quot;recorder/recorder.go:104&quot;,&quot;msg&quot;:&quot;Adding/Updating Reconcile&quot;,&quot;type&quot;:&quot;Normal&quot;,&quot;object&quot;:{&quot;kind&quot;:&quot;HTTPRoute&quot;,&quot;namespace&quot;:&quot;apps&quot;,&quot;name&quot;:&quot;server&quot;,&quot;uid&quot;:&quot;febc3797-a6fc-4020-9a7f-b036f6cbbaea&quot;,&quot;apiVersion&quot;:&quot;gateway.networking.k8s.io/v1beta1&quot;,&quot;resourceVersion&quot;:&quot;212887&quot;},&quot;reason&quot;:&quot;Reconcile&quot;}
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.819Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;eventhandlers/gateway.go:52&quot;,&quot;msg&quot;:&quot;Received Update event for Gateway my-services-apps&quot;}
...

# route 등록
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.842Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;gateway/model_build_listener.go:26&quot;,&quot;msg&quot;:&quot;Building Listener for Route server-apps&quot;}
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.842Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;gateway/model_build_listener.go:113&quot;,&quot;msg&quot;:&quot;Added listener server-apps to the stack (ID id-30e2286f178f6d12b81339b408a83399dfca872e50a93aa718b1bdc94a4891ae)&quot;}
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.842Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;gateway/model_build_lattice_service.go:84&quot;,&quot;msg&quot;:&quot;Building rules for 1 listeners&quot;}
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.842Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;gateway/model_build_rule.go:35&quot;,&quot;msg&quot;:&quot;Processing 1 rules&quot;}
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.842Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;gateway/model_build_rule.go:47&quot;,&quot;msg&quot;:&quot;Processing rule match&quot;}
...

# backendRefs에 대한 targetgroup 등록
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.842Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;gateway/model_build_targetgroup.go:264&quot;,&quot;msg&quot;:&quot;Added target group for backendRef server to the stack id-b1f433eb1062459d83ecc72bb9f59a128477f4a7a1c6d08c13722d7753d4a76d&quot;}
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.842Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;gateway/model_build_targets.go:87&quot;,&quot;msg&quot;:&quot;Processing targets for service server-apps&quot;}
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.843Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;gateway/model_build_rule.go:91&quot;,&quot;msg&quot;:&quot;Added rule 1 to the stack (ID id-cacff8032077c3ab8b8514ececd7b8a91f2d8d58fb8d09df36f5b02048b45c9a)&quot;}
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.843Z&quot;,&quot;logger&quot;:&quot;controller.route&quot;,&quot;caller&quot;:&quot;controllers/route_controller.go:294&quot;,&quot;msg&quot;:&quot;stack: {\&quot;id\&quot;:\&quot;apps/server\&quot;,\&quot;resources\&quot;:{\&quot;AWS::VPCServiceNetwork::Listener\&quot;:{\&quot;id-30e2286f178f6d12b81339b408a83399dfca872e50a93aa718b1bdc94a4891ae\&quot;:{\&quot;spec\&quot;:{\&quot;stackserviceid\&quot;:\&quot;server-apps\&quot;,\&quot;k8sroutename\&quot;:\&quot;server\&quot;,\&quot;k8sroutenamespace\&quot;:\&quot;apps\&quot;,\&quot;port\&quot;:80,\&quot;protocol\&quot;:\&quot;HTTP\&quot;}}},\&quot;AWS::VPCServiceNetwork::Rule\&quot;:{\&quot;id-cacff8032077c3ab8b8514ececd7b8a91f2d8d58fb8d09df36f5b02048b45c9a\&quot;:{\&quot;spec\&quot;:{\&quot;stacklistenerid\&quot;:\&quot;id-30e2286f178f6d12b81339b408a83399dfca872e50a93aa718b1bdc94a4891ae\&quot;,\&quot;pathmatchvalue\&quot;:\&quot;/\&quot;,\&quot;pathmatchexact\&quot;:false,\&quot;pathmatchprefix\&quot;:true,\&quot;matchedheaders\&quot;:null,\&quot;method\&quot;:\&quot;\&quot;,\&quot;priority\&quot;:1,\&quot;action\&quot;:{\&quot;ruletarget\&quot;:[{\&quot;stacktargetgroupid\&quot;:\&quot;id-b1f433eb1062459d83ecc72bb9f59a128477f4a7a1c6d08c13722d7753d4a76d\&quot;,\&quot;svcimporttg\&quot;:null,\&quot;latticetgid\&quot;:\&quot;\&quot;,\&quot;weight\&quot;:1}]},\&quot;createtime\&quot;:\&quot;2025-04-27T01:49:22.843116705Z\&quot;}}},\&quot;AWS::VPCServiceNetwork::Service\&quot;:{\&quot;server-apps\&quot;:{\&quot;spec\&quot;:{\&quot;RouteName\&quot;:\&quot;server\&quot;,\&quot;RouteNamespace\&quot;:\&quot;apps\&quot;,\&quot;RouteType\&quot;:\&quot;http\&quot;,\&quot;servicenetworkhnames\&quot;:[\&quot;my-services\&quot;],\&quot;customerdomainname\&quot;:\&quot;server.example.com\&quot;,\&quot;customercertarn\&quot;:\&quot;\&quot;},\&quot;isdeleted\&quot;:false}},\&quot;AWS:VPCServiceNetwork::TargetGroup\&quot;:{\&quot;id-b1f433eb1062459d83ecc72bb9f59a128477f4a7a1c6d08c13722d7753d4a76d\&quot;:{\&quot;spec\&quot;:{\&quot;vpcid\&quot;:\&quot;vpc-0354d26b8b07b7db5\&quot;,\&quot;type\&quot;:\&quot;IP\&quot;,\&quot;port\&quot;:80,\&quot;protocol\&quot;:\&quot;HTTP\&quot;,\&quot;protocolversion\&quot;:\&quot;HTTP1\&quot;,\&quot;ipaddresstype\&quot;:\&quot;IPV4\&quot;,\&quot;healthcheckconfig\&quot;:null,\&quot;k8sclustername\&quot;:\&quot;client-server-communication\&quot;,\&quot;k8ssourcetype\&quot;:\&quot;HTTPRoute\&quot;,\&quot;k8sservicename\&quot;:\&quot;server\&quot;,\&quot;k8sservicenamespace\&quot;:\&quot;apps\&quot;,\&quot;k8sroutename\&quot;:\&quot;server\&quot;,\&quot;k8sroutenamespace\&quot;:\&quot;apps\&quot;,\&quot;k8sprotocolversion\&quot;:\&quot;HTTP1\&quot;},\&quot;isdeleted\&quot;:false}},\&quot;AWS:VPCServiceNetwork::Targets\&quot;:{\&quot;id-b617a531446235a189f2738e8cd9e6603752ac4ad5031d9eb5400f33d0c67d62\&quot;:{\&quot;spec\&quot;:{\&quot;stacktargetgroupid\&quot;:\&quot;id-b1f433eb1062459d83ecc72bb9f59a128477f4a7a1c6d08c13722d7753d4a76d\&quot;,\&quot;targetlist\&quot;:null}}}}}&quot;}
...
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.965Z&quot;,&quot;logger&quot;:&quot;cloud&quot;,&quot;caller&quot;:&quot;aws/cloud.go:65&quot;,&quot;msg&quot;:&quot;response&quot;,&quot;serviceName&quot;:&quot;tagging&quot;,&quot;operation&quot;:&quot;GetResources&quot;,&quot;params&quot;:&quot;{\n  ResourceTypeFilters: [\&quot;vpc-lattice:targetgroup\&quot;],\n  TagFilters: [\n    {\n      Key: \&quot;application-networking.k8s.aws/ClusterName\&quot;,\n      Values: [\&quot;client-server-communication\&quot;]\n    },\n    {\n      Key: \&quot;application-networking.k8s.aws/ServiceName\&quot;,\n      Values: [\&quot;server\&quot;]\n    },\n    {\n      Key: \&quot;application-networking.k8s.aws/ServiceNamespace\&quot;,\n      Values: [\&quot;apps\&quot;]\n    },\n    {\n      Key: \&quot;application-networking.k8s.aws/SourceTypeKey\&quot;,\n      Values: [\&quot;HTTPRoute\&quot;]\n    },\n    {\n      Key: \&quot;application-networking.k8s.aws/ProtocolVersion\&quot;,\n      Values: [\&quot;HTTP1\&quot;]\n    },\n    {\n      Key: \&quot;application-networking.k8s.aws/RouteName\&quot;,\n      Values: [\&quot;server\&quot;]\n    },\n    {\n      Key: \&quot;application-networking.k8s.aws/RouteNamespace\&quot;,\n      Values: [\&quot;apps\&quot;]\n    }\n  ]\n}&quot;}
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:22.968Z&quot;,&quot;logger&quot;:&quot;cloud&quot;,&quot;caller&quot;:&quot;aws/cloud.go:65&quot;,&quot;msg&quot;:&quot;response&quot;,&quot;serviceName&quot;:&quot;VPC Lattice&quot;,&quot;operation&quot;:&quot;ListServiceNetworks&quot;,&quot;params&quot;:&quot;{\n\n}&quot;}
{&quot;level&quot;:&quot;debug&quot;,&quot;ts&quot;:&quot;2025-04-27T01:49:23.103Z&quot;,&quot;logger&quot;:&quot;cloud&quot;,&quot;caller&quot;:&quot;aws/cloud.go:65&quot;,&quot;msg&quot;:&quot;response&quot;,&quot;serviceName&quot;:&quot;VPC Lattice&quot;,&quot;operation&quot;:&quot;ListTagsForResource&quot;,&quot;params&quot;:&quot;{\n  ResourceArn: \&quot;arn:aws:vpc-lattice:us-east-1:517206134011:servicenetwork/sn-0a9c2d300e05d3283\&quot;\n}&quot;}
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380e5bbdcc5e3888703be&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c23806995aed07ac1635b6a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 로그의 내용처럼 EKS 클러스터 내에 GatewayClass, Gateway, Route에 대한 오브젝트가 추가되면 AWS Gateway API Controller에서 이를 감지하여 조정(reconcile)합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380b89067d3e8e2e8363f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/52ca2db5-542b-425a-bf5c-a145f441424b/image.png?table=block&amp;amp;id=1e1b8b2c-1c23-80b8-9067-d3e8e2e8363f&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1745748000000&amp;amp;signature=gBzKkzmd9LBvWa27YHoxobL2FoXbM0Xy0pFZpUDTDz4&quot; alt=&quot;image&quot; width=&quot;1200&quot; height=&quot;573.562359970127&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380cf8146c86cef91f2a7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: 0px;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/a6d0c351-349c-4dee-937b-ae4b711f4521/image.png?table=block&amp;amp;id=1e1b8b2c-1c23-80cf-8146-c86cef91f2a7&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1745748000000&amp;amp;signature=ywNi-ppwtVcvJK4U3_ti8XXBdB5NMUvJmKNzVZGPtW4&quot; alt=&quot;image&quot; width=&quot;1200&quot; height=&quot;612.2264150943396&quot; /&gt;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380b48177d28ad48c8877&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;설명은 아래와 같습니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c238062a036c8c75ffdc7a3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;로그를 보면,&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;server&lt;/code&gt;라는 이름의 service와&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;my-services&lt;/code&gt;라는 이름의 gateway의 생성을 감지하여, reconcile 작업을 수행하는 것을 확인할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23804abb89cff6d689f2fe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이어서&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;server-apps&lt;/code&gt;라는 이름(HTTPRoute의 metadata.name 및 metadata.namespace를 사용)으로 구성된 Route 대상에 라우팅 하기 위해&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;server.example.com&lt;/code&gt;이라는 사용자 지정 도메인 이름을 세팅하고, VPC Lattice Service를 구성합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23802daae1e1c88ba88458&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그리고 VPC Lattice Service에 대해 Listener rule을 생성하고 HTTPRoute 매니페스트 내용에 맞춰 PathPrefix를 구성하고, backendRefs에 대한 대상 그룹을 생성합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380399f1eccf61d828a37&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;대상 그룹에는 Service를 참조하여 라우팅 대상 Pod의 IP 주소 및 Port 번호를 세팅합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e1b8b2c1c23806db9d3de684a7dc12f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238041b8d4f6f632522bb2&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1015px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1e1b8b2c1c2380c0b415e257780c8b52&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이번 실습에서 적용된 GatewayClass, Gateway, Route 명세서는 &amp;lsquo; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &amp;gt; eks.tf 살펴보기&amp;rsquo;&lt;/span&gt;를 참고해주세요.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c23801794efe18e33b10416&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e1b8b2c1c238077b445c66a1cdea26e&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 우리는 AWS Gateway API Controller가 GatewayClass, Gateway, Route 리소스를 참조하여 VPC Lattice 네트워크 환경을 구성하여 정상적으로 통신이 가능한 환경을 구성했다는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238047b48acee1062e49c0&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.9. 실습 리소스 정리&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e1b8b2c1c238028b500f181a630f0bb&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;terraform destroy -target=&quot;module.client_vpc&quot; -auto-approve
terraform destroy -target=&quot;module.cluster_vpc&quot; -auto-approve
terraform destroy -target=aws_route53_zone.primary -auto-approve

terraform destroy -target=&quot;module.client_sg&quot; -auto-approve
terraform destroy -target=&quot;module.endpoint_sg&quot; -auto-approve

terraform destroy -target=&quot;module.client&quot; -auto-approve
terraform destroy -target=&quot;module.vpc_endpoints&quot; -auto-approve

terraform destroy -target=&quot;module.eks&quot; -auto-approve
terraform destroy -target=&quot;module.addons&quot; -auto-approve

terraform destroy -auto-approve&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c238047b48acee1062e49c0&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;5&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;5&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23800ba156e378e196fca6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Multi Cluster secure communication(실습)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380b29800f3a9bd393420&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.0. 실습 환경&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e2b8b2c1c23808fad76cda1ba3d38fb&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1015px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380aaa940de305355e498&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이번 실습에서는&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://aws-ia.github.io/terraform-aws-eks-blueprints/patterns/network/cross-cluster-pod-communication/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Amazon EKS Blueprints for Terraform : Amazon VPC Lattice - Multi-cluster secure communication&lt;/a&gt;을 활용합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238012841df51f23ead033&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23805eb166f46378751af0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이번 섹션에서는 조금 더 심화 과정으로, 멀티 클러스터 환경 간에서 Amazon VPC Lattice를 활용한 안전한 통신 방법에 대해 실습을 진행합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23804fb91dea7bb05ef781&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;862&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHwiy8/btsNA2bVK7L/jWJ76DfXo0vKthHUBmC7WK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHwiy8/btsNA2bVK7L/jWJ76DfXo0vKthHUBmC7WK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHwiy8/btsNA2bVK7L/jWJ76DfXo0vKthHUBmC7WK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHwiy8%2FbtsNA2bVK7L%2FjWJ76DfXo0vKthHUBmC7WK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;862&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;862&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c2380d98fd1fea398f2d710&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 패턴에서는 Amazon VPC Lattice와 IAM authorization을 사용하여 서로 다른 VPC에 있는 두 EKS 클러스터 간의 안전한 멀티 클러스터 통신 방식을 보여줍니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23801caf54d1c948e14716&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 솔루션에서는 Service Discovery가 어떻게 이루어지는지를 설명하고, VPC Lattice가 겹치는 CIDR을 가진 EKS 클러스터 간 통신을 어떻게 용이하게 하는지 강조합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380d69393e60a5719b3b1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 통해 프라이빗 NAT 게이트웨이와 Transit Gateway와 같은 네트워킹 구조가 필요하지 않도록 하는 방법을 소개합니다.&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c23805896fcdb038697ef34&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 간 통신을 안전하게 수행하기 위해, 인증서 관리자(ACM)에서 발행하고 AWS Private CA에서 지원하는 TLS 인증서로 보호되는 Amazon Route53 Private Hosted Zone을 사용하여 Amazon VPC Lattice를 통해 설정됩니다.&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380b1bb7ffc66feb24cee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 위해 Kyverno를 사용하여 Envoy SigV4 proxy 컨테이너를 Pod에 추가하고, 여기에 PCA를 주입합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380449f37d3d41cdad9db&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1e2b8b2c1c238023a5fbe9f9e3db6f8b&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 20px; margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;주요 컴포넌트&lt;/h3&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380be8e05f64d8b975130&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23804abeaeed7124bdcb7e&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인프라 구성&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380d68ae1ffb8ef5ff4db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;두 개의 VPC&lt;/span&gt;: VPC cluster 1과 VPC cluster 2가 독립적으로 구성&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380a49cbdc52fb5eec182&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;두 개의 EKS 클러스터&lt;/span&gt;: 각 VPC에 EKS Cluster 1과 EKS Cluster 2 배포&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380b6a980d1a3c47d0296&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VPC Lattice&lt;/span&gt;: 두 VPC 간의 서비스 통신을 위한 중앙 관리형 연결 서비스&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c23803d82ffec6591d3cba8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23809693f4db22addb098d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션 구성&lt;/span&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380358ab8ddcb0e9e996d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EKS Cluster 1 애플리케이션&lt;/span&gt;:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c238073ac97e7682736508b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;App1 Service가 Pod로 배포됨&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380acb5e4d44c134e527f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Envoy sidecar 프록시를 통한 서비스 메시 구성&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c238035957af6ea85960d03&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;HTTP Route를 통한 외부 트래픽 라우팅&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1e2b8b2c1c238040b8bdeb549b83addd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EKS Cluster 2 애플리케이션&lt;/span&gt;:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c238013ba48fed5ba20f31c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;App2 Service가 Pod로 배포됨&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c23802db599cb90055464bb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마찬가지로 Envoy sidecar 프록시와 HTTP Route 구성&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380d89ce2f121de0e1275&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380949cbad7a0f5ff760e&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;정책 및 보안&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380e78acaf5fa60ccad16&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Kyverno&lt;/span&gt;: 각 클러스터에 적용된 정책 관리 도구로 사이드카 주입 등을 관리&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380d584d7fbbbec41f020&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IAM Auth Policy&lt;/span&gt;: 두 클러스터 간의 인증 및 권한 정책 설정&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380c7ab34c25eaadb27c0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Private Certificate Authority&lt;/span&gt;: 중앙 인증서 관리&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c23809ba58dc3fb315371d8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Certificate Manager&lt;/span&gt;: *.example.com 도메인을 위한 인증서 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c23806686d2cf99b8aa333e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380f1ac01cbe5924f9fbc&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네트워킹&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23809699b7e4113f385558&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Gateway API Controller&lt;/span&gt;: 각 클러스터의 API 트래픽 제어&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380139476d9aa3e93ad36&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DNS 구성&lt;/span&gt;:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380698e63e366a2a01e22&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ExternalDNS를 통한 DNS 레코드 관리&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380a68b98f6d07ddf251e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;demo-cluster1.example.com&lt;/code&gt; 및 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;demo-cluster2.example.com&lt;/code&gt;으로 각 클러스터 서비스 노출&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380349b59ea1402fce676&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Amazon Route 53을 통한 도메인 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380b79622e5eab0b7a3a0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380aa8979f2436e468298&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;주요 흐름 및 프로세스&lt;/span&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380f9a536d41e2dfdff47&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;VPC Lattice를 통해 HTTPS 트래픽이 두 클러스터 간에 라우팅됨&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380689f91e6cdc4ebdc85&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;각 클러스터의 IAM Auth Policy가 접근 권한을 제어&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380758db6d2f1aa0b5f2a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Pod Identity 기능을 통해 Envoy SigV4 proxy 컨테이너에 ACM에 대한 권한 및 VPC Lattice service invoke 권한 부여&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c23803684bbedb938d93fcb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;AWS Gateway API Controller가 각 클러스터의 인그레스 트래픽을 관리&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380608f85ef276b468ba5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ExternalDNS가 자동으로 DNS 레코드를 생성하여 서비스 디스커버리 지원&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380d89de2fef8b26591fc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238083827ae4a18f8537d0&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.1. Terraform 코드 준비 및 프로비저닝&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380e695d5dbe98f39928c&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt;⚠️&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 1015px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380e2bbc2f47e083c1d70&quot; class=&quot;notion-toggle closed bg-gray&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;[확장하기] 만약, 실습 1의 단계를 먼저 수행하지 않았을 경우 아래 과정을 먼저 준비해주세요.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23809fbd6ee29e22467b9f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23801796afdf751e012525&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.1.1. environment 프로비저닝&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;649&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zxhgz/btsNBDiqxut/mXPPUsmE8kUAuOYuwV5lu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zxhgz/btsNBDiqxut/mXPPUsmE8kUAuOYuwV5lu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zxhgz/btsNBDiqxut/mXPPUsmE8kUAuOYuwV5lu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzxhgz%2FbtsNBDiqxut%2FmXPPUsmE8kUAuOYuwV5lu1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;649&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;649&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238089a3dcd1c6fc183a21&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;environment의 Terraform을 통해 구성되는 내용들&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23806d8735eadcacedd3de&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;environment 환경에서는 실습에 필요한 사전 환경(Route53, VPC Lattice, IAM Role, ACM 등)을 프로비저닝 합니다.&lt;/p&gt;
&lt;p id=&quot;block-1e2b8b2c1c23809eb7d5f4e8779f4dfd&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;자세한 내용은 아래 코드를 파악하여 확인해보겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380e1bb5dd6ceac4d29d0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238005a324ffe61df95a48&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;environment :Terraform 코드 살펴보기&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c238054a8fbcf2b6745533e&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;environment 디렉터리&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380e99958efd262041752&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238020b40ac3d35929d6f6&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;인프라 프로비저닝을 위해 아래 내용을 진행합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23809c9f9ad60993a9a5e0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23809bb758f3b54468c9cf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 명령을 수행하여 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;cross-cluster-pod-communication/environment/&lt;/code&gt; 디렉터리로 이동합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380568e43d4bd1e09b6ab&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;mel&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;cd terraform-aws-eks-blueprints/patterns/vpc-lattice/cross-cluster-pod-communication/environment/&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;2&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;2&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380909a15d335539f97f4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;main.tf 파일을 열고, 7번째 라인의 region을 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ap-northeast-2&lt;/code&gt;로 수정합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/okSzX/btsNCmmXoap/oSbNfHHnd9xGSm0ZxOVUZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/okSzX/btsNCmmXoap/oSbNfHHnd9xGSm0ZxOVUZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/okSzX/btsNCmmXoap/oSbNfHHnd9xGSm0ZxOVUZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FokSzX%2FbtsNCmmXoap%2FoSbNfHHnd9xGSm0ZxOVUZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;547&quot; height=&quot;291&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;291&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e2b8b2c1c2380198e30ffc8b00b656a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;2&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23802bb553c13d101bfa84&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 명령을 수행하여 environment의 인프라를 프로비저닝 합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e2b8b2c1c238083bc09f7aecd2fe153&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;coq&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;terraform init
terraform apply --auto-approve&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238076a07bfc90797b0e12&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380809afdc6ab604bb428&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.1.2. cluster 프로비저닝&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380b7b3eec2e485ed2513&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이어서 cluster 환경에서는 실습에 사용할 두 개의 EKS 클러스터 및 데모 애플리케이션을 구성합니다.&lt;/p&gt;
&lt;p id=&quot;block-1e2b8b2c1c23802097c4d9265525c3c0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;자세한 내용은 아래 코드를 파악하여 확인해보겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23805ab088d3a0d2b3db44&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238036a652dac8e471839d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;cluster :Terraform 코드 살펴보기 &lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380f094b0f4e88fc4afa6&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;cluster 디렉터리&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380d8b9b1de4401c1d395&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380eda65ecfd5b5be2b7e&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;인프라 프로비저닝 및 데모 애플리케이션 배포를 위해 아래 내용을 진행합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23808e8e5dc89de4f7af35&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c238045b96bdfa122d7d7da&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 명령을 수행하여 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;cross-cluster-pod-communication/cluster/&lt;/code&gt; 디렉터리로 이동합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e2b8b2c1c238077a3c3f5b11cfbcc27&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;gams&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;cd ../cluster/&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;2&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;2&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23808396a1d0b01345b9e2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;main.t&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://main.tf/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;f&lt;/a&gt; 파일을 열고, 31번째 라인의 region을 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;ap-northeast-2&lt;/code&gt;로 수정합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0EqT7/btsNCatxuTW/a3cnQgZDnNT93fZNv2DCNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0EqT7/btsNCatxuTW/a3cnQgZDnNT93fZNv2DCNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0EqT7/btsNCatxuTW/a3cnQgZDnNT93fZNv2DCNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0EqT7%2FbtsNCatxuTW%2Fa3cnQgZDnNT93fZNv2DCNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;782&quot; height=&quot;370&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e2b8b2c1c238008b63ff5db41cb9450&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;2&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23805e898edb1af8e4b20a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이어서 아래 명령을 통해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;첫번째 EKS 클러스터&lt;/span&gt;를 배포합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380abbdccc693010450f9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;perl&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;./deploy.sh cluster1

# 배포 완료 후, 아래 명령으로 kubectl config 설정을 완료합니다.
eval `terraform output -raw configure_kubectl`&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;4&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380ea8276ff883f886305&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이어서 아래 명령을 통해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;두번째 EKS 클러스터&lt;/span&gt;를 배포합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1e2b8b2c1c238001b7e5f0eae55d1544&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;perl&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;./deploy.sh cluster2

# 배포 완료 후, 아래 명령으로 kubectl config 설정을 완료합니다.
eval `terraform output -raw configure_kubectl`&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23809996c1ee81243fcd3f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380188200db5434b3ad0a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.2. 프로비저닝 된 인프라 및 애플리케이션 확인&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380579709ecc10b6ddf4a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Terraform을 통해 어떤 인프라가 구성되었는지 확인해보겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23800cb94be5919c12c3b2&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.2.1. Amazon EKS 클러스터&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380a7bf8bf6d5a9163b3c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Amazon EKS 콘솔에 접속해보면 아래와 같이 두 개의 EKS 클러스터가 생성된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1267&quot; data-origin-height=&quot;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/epDKzT/btsNBFUQE4y/SYIu6BxdwJr2INQkVZdfd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/epDKzT/btsNBFUQE4y/SYIu6BxdwJr2INQkVZdfd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/epDKzT/btsNBFUQE4y/SYIu6BxdwJr2INQkVZdfd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FepDKzT%2FbtsNBFUQE4y%2FSYIu6BxdwJr2INQkVZdfd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1267&quot; height=&quot;206&quot; data-origin-width=&quot;1267&quot; data-origin-height=&quot;206&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e2b8b2c1c238003a841f2f62675adc0&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380c7b572f6d115db3ca9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;eks-cluster1을 들어가보겠습니다.&lt;/p&gt;
&lt;p id=&quot;block-1e2b8b2c1c238010a033f7d21a3466c1&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Access &amp;gt; Pod Identity associations&lt;/span&gt; 순으로 콘솔을 이동하면 아래와 같은 내용을 확인할 수 있습니다.&lt;/p&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380ab9e5ddca5fa18c8e6&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;vpc-lattice-sig4-client&lt;/code&gt;라는 IAM role이 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;apps&lt;/code&gt;라는 네임스페이스의 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;default&lt;/code&gt;라는 Service account에 associate 된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bebHXK/btsNA8XAvaa/e92opk75ep9k0gRhjyC9uK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bebHXK/btsNA8XAvaa/e92opk75ep9k0gRhjyC9uK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bebHXK/btsNA8XAvaa/e92opk75ep9k0gRhjyC9uK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbebHXK%2FbtsNA8XAvaa%2Fe92opk75ep9k0gRhjyC9uK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;162&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e2b8b2c1c23809e948cd7ae5d8c3f72&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238040ac92f73425576b94&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;해당 IAM role을 클릭해보면 아래와 같이 IAM 콘솔로 이동하여 자세히 확인할 수 있습니다.&lt;/p&gt;
&lt;p id=&quot;block-1e2b8b2c1c238094bcb1db36fcfaa255&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 IAM role은 ACM의 PCA에 대한 여러 액세스 권한과 VPC Lattice Service에 대한 invoke 권한이 설정되어 있습니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1244&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uXMnk/btsNBIKOUMG/CPEkBKKOhn92cy3AAaQZb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uXMnk/btsNBIKOUMG/CPEkBKKOhn92cy3AAaQZb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uXMnk/btsNBIKOUMG/CPEkBKKOhn92cy3AAaQZb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuXMnk%2FbtsNBIKOUMG%2FCPEkBKKOhn92cy3AAaQZb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1244&quot; height=&quot;216&quot; data-origin-width=&quot;1244&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e2b8b2c1c238075b16bdae42d0ba884&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380a48c13e65b4afce685&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;816&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlQgNW/btsNBJwch4M/AE5zZOhLG68ZSwjWcIaiZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlQgNW/btsNBJwch4M/AE5zZOhLG68ZSwjWcIaiZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlQgNW/btsNBJwch4M/AE5zZOhLG68ZSwjWcIaiZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlQgNW%2FbtsNBJwch4M%2FAE5zZOhLG68ZSwjWcIaiZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1234&quot; height=&quot;816&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;816&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c2380d8a8f0dff349ddf106&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;위의 에서 확인한 바와 같이 해당 Pod Identity 및 IAM role은 데모 애플리케이션 Pod에 적용됩니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380a985ebefe2d1133c5b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238006bcacd4b82291512f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.2.2. VPC Lattice&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380af923ad197840d92af&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VPC 콘솔 &amp;gt; PrivateLink and Lattice &amp;gt; Service networks&lt;/span&gt; 순으로 콘솔을 이동하면 아래와 같이 VPC Lattice Service network 콘솔로 이동할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380a1a0f0cd1e1ce69619&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;137&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RJXej/btsNBD3M5SL/oAUO43kzakxwI7SMNcZ6yK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RJXej/btsNBD3M5SL/oAUO43kzakxwI7SMNcZ6yK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RJXej/btsNBD3M5SL/oAUO43kzakxwI7SMNcZ6yK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRJXej%2FbtsNBD3M5SL%2FoAUO43kzakxwI7SMNcZ6yK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;137&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;137&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23807cbdd6dd7e4c8b4a57&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380cdbec9e479344a7775&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;579&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccdyK3/btsNCmHhsjW/DjdaqVKoU5lzs6lvwKXaH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccdyK3/btsNCmHhsjW/DjdaqVKoU5lzs6lvwKXaH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccdyK3/btsNCmHhsjW/DjdaqVKoU5lzs6lvwKXaH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccdyK3%2FbtsNCmHhsjW%2FDjdaqVKoU5lzs6lvwKXaH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;579&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;579&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380b9ab93e5be290776ef&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VPC 콘솔 &amp;gt; PrivateLink and Lattice &amp;gt; Lattice services &lt;/span&gt;순으로 콘솔을 이동하면 아래와 같이 VPC Lattice의 Service 콘솔로 이동할 수 있습니다. 각 Service가 커스텀 도메인 명에 매핑된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380cab15ddb6ed6c07563&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GBxGs/btsNBMl9FVt/aaJofMkAiIWHgDKOOtHGRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GBxGs/btsNBMl9FVt/aaJofMkAiIWHgDKOOtHGRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GBxGs/btsNBMl9FVt/aaJofMkAiIWHgDKOOtHGRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGBxGs%2FbtsNBMl9FVt%2FaaJofMkAiIWHgDKOOtHGRK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1204&quot; height=&quot;278&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380e49937fc19a896d410&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C0QfA/btsNBuMPxyZ/7V8JKD2R0LJ2Sk3tJORGak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C0QfA/btsNBuMPxyZ/7V8JKD2R0LJ2Sk3tJORGak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C0QfA/btsNBuMPxyZ/7V8JKD2R0LJ2Sk3tJORGak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC0QfA%2FbtsNBuMPxyZ%2F7V8JKD2R0LJ2Sk3tJORGak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;142&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c23809f942fed6ce6a0ecb1&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 내 실습 환경 캡쳐&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380f79c0ccefed47f5ef8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238037b5f0e6d63115f0b9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 아래와 같이 각 Service가 Private Hosted Zone에 associate 되어있고 PCA를 사용하고 있는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZs1Vo/btsNBMNbwNo/mU8mAjC52k2w6tjZrgjha1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZs1Vo/btsNBMNbwNo/mU8mAjC52k2w6tjZrgjha1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZs1Vo/btsNBMNbwNo/mU8mAjC52k2w6tjZrgjha1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZs1Vo%2FbtsNBMNbwNo%2FmU8mAjC52k2w6tjZrgjha1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;270&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1e2b8b2c1c2380219ddcefd9d29c3176&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380328cf9f1b4628e9a81&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Route53 Private Hosted Zone&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;667&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nfhXQ/btsNBLALQk6/wFUZChfzmAl8yYur3O6He0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nfhXQ/btsNBLALQk6/wFUZChfzmAl8yYur3O6He0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nfhXQ/btsNBLALQk6/wFUZChfzmAl8yYur3O6He0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnfhXQ%2FbtsNBLALQk6%2FwFUZChfzmAl8yYur3O6He0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1256&quot; height=&quot;667&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;667&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e2b8b2c1c23804e989bd878e9241c8b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238029a0c6ef9a692ebcc0&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;669&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tjYxN/btsNBy9fMs1/VK9g7skVw0bEXAYum0jNY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tjYxN/btsNBy9fMs1/VK9g7skVw0bEXAYum0jNY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tjYxN/btsNBy9fMs1/VK9g7skVw0bEXAYum0jNY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtjYxN%2FbtsNBy9fMs1%2FVK9g7skVw0bEXAYum0jNY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;669&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;669&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c23805c8adfd4a7b6314b60&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 내 실습 환경 캡쳐&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238019b9e7c4c57886bfc2&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;AWS Certificate Manager(ACM)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;537&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U98iV/btsNAVxabLz/nhvhCoyVRkDjbqD01Qw2lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U98iV/btsNAVxabLz/nhvhCoyVRkDjbqD01Qw2lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U98iV/btsNAVxabLz/nhvhCoyVRkDjbqD01Qw2lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU98iV%2FbtsNAVxabLz%2FnhvhCoyVRkDjbqD01Qw2lk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;651&quot; height=&quot;537&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;537&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e2b8b2c1c238007b6fadb821141a7a1&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380d5b409cb235e8d0dea&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380e281c0c7c9d94d5878&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;459&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clOjug/btsNAILPmr8/jICGwsROjkkgqGmQWJHQHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clOjug/btsNAILPmr8/jICGwsROjkkgqGmQWJHQHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clOjug/btsNAILPmr8/jICGwsROjkkgqGmQWJHQHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclOjug%2FbtsNAILPmr8%2FjICGwsROjkkgqGmQWJHQHk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;670&quot; height=&quot;459&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;459&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23805c9cfee48097d1593e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;656&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/It2pq/btsNAPjDEb6/ltVqa8eBZrk1hIVQq40L70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/It2pq/btsNAPjDEb6/ltVqa8eBZrk1hIVQq40L70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/It2pq/btsNAPjDEb6/ltVqa8eBZrk1hIVQq40L70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIt2pq%2FbtsNAPjDEb6%2FltVqa8eBZrk1hIVQq40L70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;656&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;656&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c2380f59e39d4c58e118aa0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 내 실습 환경 캡쳐&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380a6a294deac70d2df2f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.2.3. EKS 클러스터 별 애플리케이션&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e2b8b2c1c238005857ffa69fb30f2f5&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령을 수행하여 eks-cluster1으로 context를 스위칭 할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23803bacedea0c292267d0&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl config use-context eks-cluster1
Switched to context &quot;eks-cluster1&quot;.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238083b090c0e59f93e188&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380579f6df2fc88a43fb8&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;eks-cluster1의 Pod 목록을 조회하기 위해 아래 명령을 수행합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380229f21f37cae0d4da0&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl get po -A

NAMESPACE                           NAME                                                              READY   STATUS      RESTARTS   AGE
apps                                demo-cluster1-v1-65fb578f8f-28c6w                                 2/2     Running     0          32m
aws-application-networking-system   aws-gateway-api-controller-aws-gateway-controller-chart-5f2zwmw   1/1     Running     0          35m
aws-application-networking-system   aws-gateway-api-controller-aws-gateway-controller-chart-5fmwlkq   1/1     Running     0          35m
external-dns                        external-dns-5c6f9b9b87-mxgmv                                     1/1     Running     0          35m
kube-system                         aws-node-7tz74                                                    2/2     Running     0          33m
kube-system                         aws-node-jdl64                                                    2/2     Running     0          33m
kube-system                         aws-node-pc6sw                                                    2/2     Running     0          33m
kube-system                         coredns-5fc547d667-2nlz4                                          1/1     Running     0          33m
kube-system                         coredns-5fc547d667-ldxgf                                          1/1     Running     0          33m
kube-system                         eks-pod-identity-agent-jps4d                                      1/1     Running     0          33m
kube-system                         eks-pod-identity-agent-rfjhb                                      1/1     Running     0          33m
kube-system                         eks-pod-identity-agent-v6qln                                      1/1     Running     0          33m
kube-system                         kube-proxy-4gh9v                                                  1/1     Running     0          33m
kube-system                         kube-proxy-7d6ls                                                  1/1     Running     0          33m
kube-system                         kube-proxy-tthps                                                  1/1     Running     0          33m
kyverno                             kyverno-admission-controller-54b8bdb86f-ht4ql                     1/1     Running     0          36m
kyverno                             kyverno-background-controller-64fcf87c7b-wdwjw                    1/1     Running     0          36m
kyverno                             kyverno-cleanup-admission-reports-29095670-cd28n                  0/1     Completed   0          9m1s
kyverno                             kyverno-cleanup-cluster-admission-reports-29095670-tmgr7          0/1     Completed   0          9m1s
kyverno                             kyverno-cleanup-controller-5b4b8f645b-7944l                       1/1     Running     0          36m
kyverno                             kyverno-reports-controller-55b9787f78-kwjwx                       1/1     Running     0          36m&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380b2a1a4cd5507faf729&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380d3b1acd565db8d8408&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lXuNd/btsNCvDXb3d/fcf9XZYfaKyWfEvab07kv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lXuNd/btsNCvDXb3d/fcf9XZYfaKyWfEvab07kv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lXuNd/btsNCvDXb3d/fcf9XZYfaKyWfEvab07kv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlXuNd%2FbtsNCvDXb3d%2Ffcf9XZYfaKyWfEvab07kv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;994&quot; height=&quot;327&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23802ab15ce37d779a1119&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이어서 아래 명령을 통해 데모 애플리케이션 Pod(demo-cluster1-v1)의 구성을 확인해보겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23801db754cf905c3816c3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl describe po demo-cluster1-v1-65fb578f8f-28c6w -n apps 
Name:             demo-cluster1-v1-65fb578f8f-28c6w
Namespace:        apps
Priority:         0
Service Account:  default
Node:             ip-10-0-24-212.ap-northeast-2.compute.internal/10.0.24.212
Start Time:       Sun, 27 Apr 2025 16:26:29 +0900
Labels:           app=demo-cluster1-v1
                  pod-template-hash=65fb578f8f
Annotations:      vpc-lattices-svcs.amazonaws.com/agent-inject: true
Status:           Running
IP:               10.0.18.13
IPs:
  IP:           10.0.18.13
Controlled By:  ReplicaSet/demo-cluster1-v1-65fb578f8f
Init Containers:
  iptables-init:
    Container ID:  containerd://edd7640548a774663e2a1b349a498ab9754c2640e9479ccf69a28a73096f351a
    Image:         public.ecr.aws/seb-demo/iptables:v1
    Image ID:      public.ecr.aws/seb-demo/iptables@sha256:32f68e35a3c5925c7ee4cc664411063579418975e99754e0b9a53b1405b49e03
    Port:          &amp;lt;none&amp;gt;
    Host Port:     &amp;lt;none&amp;gt;
    Command:
      /bin/sh
      -c
      iptables -t nat -N EGRESS_PROXY; iptables -t nat -A OUTPUT -p tcp -d 169.254.171.0/24 -j EGRESS_PROXY; iptables -t nat -A EGRESS_PROXY -m owner --gid-owner 0 -j RETURN; iptables -t nat -A EGRESS_PROXY -p tcp -j REDIRECT --to-ports 8080; iptables -t nat -L -n -v;
      
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23800d9fa4e38cb6e3a78b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380d7aa74e0d21a5f91c4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/ko/docs/concepts/workloads/pods/init-containers/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Init Containers&lt;/a&gt;를 통해 envoy-sigv4 컨테이너를 위한 IPTables 세팅이 수행되었습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380838527c53a9180db74&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23806083c2ea5ddee5143a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2RdVF/btsNCcSnT5G/5jIfBrAODBT8rdmccE1srk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2RdVF/btsNCcSnT5G/5jIfBrAODBT8rdmccE1srk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2RdVF/btsNCcSnT5G/5jIfBrAODBT8rdmccE1srk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2RdVF%2FbtsNCcSnT5G%2F5jIfBrAODBT8rdmccE1srk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;716&quot; height=&quot;209&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;209&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238075a887db7e7b6b427a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 아래와 같이 envoy-sigv4 컨테이너와 데모 애플리케이션 컨테이너가 잘 배포되어 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380278b08e9801667da3e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380e4abddc1f9177d0a5f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1064&quot; data-origin-height=&quot;635&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcTRS4/btsNCqplevo/HyL9zbbNdIULA1KKUbkn4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcTRS4/btsNCqplevo/HyL9zbbNdIULA1KKUbkn4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcTRS4/btsNCqplevo/HyL9zbbNdIULA1KKUbkn4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcTRS4%2FbtsNCqplevo%2FHyL9zbbNdIULA1KKUbkn4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1064&quot; height=&quot;635&quot; data-origin-width=&quot;1064&quot; data-origin-height=&quot;635&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380f1bdddccf5dd024e9a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;(Optional) 만약 eks-cluster2 클러스터의 Pod 목록도 함께 조회하고 싶다면, 아래 명령을 수행하세요.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380208daae270e8a0b1f6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl config use-context eks-cluster2
Switched to context &quot;eks-cluster2&quot;.

kubectl get po -A
NAMESPACE                           NAME                                                              READY   STATUS      RESTARTS   AGE
apps                                demo-cluster2-v1-6dd9649486-nb5b7                                 2/2     Running     0          9m5s
aws-application-networking-system   aws-gateway-api-controller-aws-gateway-controller-chart-7cfkkcz   1/1     Running     0          21m
aws-application-networking-system   aws-gateway-api-controller-aws-gateway-controller-chart-7cstdbz   1/1     Running     0          21m
external-dns                        external-dns-594fd4bffb-xdrlt                                     1/1     Running     0          21m
kube-system                         aws-node-g6kb9                                                    2/2     Running     0          19m
kube-system                         aws-node-pd58r                                                    2/2     Running     0          19m
kube-system                         aws-node-q9lgh                                                    2/2     Running     0          18m
kube-system                         coredns-5fc547d667-j7zl6                                          1/1     Running     0          19m
kube-system                         coredns-5fc547d667-nvg98                                          1/1     Running     0          19m
kube-system                         eks-pod-identity-agent-5xxt6                                      1/1     Running     0          19m
kube-system                         eks-pod-identity-agent-lb5fk                                      1/1     Running     0          19m
kube-system                         eks-pod-identity-agent-rxmqg                                      1/1     Running     0          19m
kube-system                         kube-proxy-7crgb                                                  1/1     Running     0          19m
kube-system                         kube-proxy-k4dbd                                                  1/1     Running     0          19m
kube-system                         kube-proxy-nfsrb                                                  1/1     Running     0          19m
kyverno                             kyverno-admission-controller-54b8bdb86f-49dlc                     1/1     Running     0          14m
kyverno                             kyverno-background-controller-64fcf87c7b-24zvq                    1/1     Running     0          14m
kyverno                             kyverno-cleanup-admission-reports-29095680-f8258                  0/1     Completed   0          57s
kyverno                             kyverno-cleanup-cluster-admission-reports-29095680-vqv8b          0/1     Completed   0          57s
kyverno                             kyverno-cleanup-controller-5b4b8f645b-f4t8m                       1/1     Running     0          14m
kyverno                             kyverno-reports-controller-55b9787f78-r2tgf                       1/1     Running     0          14m&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380de965dcb9eb9f349d8&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rG92e/btsNBEn5O5W/hJWnMRfCrKTeTjXY1VHr60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rG92e/btsNBEn5O5W/hJWnMRfCrKTeTjXY1VHr60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rG92e/btsNBEn5O5W/hJWnMRfCrKTeTjXY1VHr60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrG92e%2FbtsNBEn5O5W%2FhJWnMRfCrKTeTjXY1VHr60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;990&quot; height=&quot;328&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23804b9fddc03913a3d08b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380ad9f3cde54122a8582&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.3. 통신 테스트 및 동작방식 확인&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380d0ad5bf9b1a4f7cf67&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;6.3.1. 동작 방식 확인&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380369551f94f0aec0590&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이제 두 클러스터 간 연결성을 확인하기 위해 아래의 명령을 실행해보겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380b0996cef7e6822578b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;maxima&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl --context eks-cluster1 \
  exec -ti -n apps deployments/demo-cluster1-v1 -c demo-cluster1-v1 \
  -- curl demo-cluster2.example.com
 &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380169830f467c1ffd181&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 명령은 eks-cluster1의 데모 애플리케이션에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;eks-cluster2의 데모 애플리케이션으로 간단한 요청&lt;/span&gt;을 전송합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23808cbfe9ebec68f9ed8a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238054af34e226ec7fef21&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;예상되는 응답은 아래와 같습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380f099a5f5594d1aa398&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;Requsting to Pod(demo-cluster2-v1-6dd9649486-nb5b7): Hello from demo-cluster2-v1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238082aab7f61bf0c7014f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380b3b071d4dbeb51da32&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oAVkj/btsNCaUCddK/qj0o5PjBt5z0wKTGJpSX90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oAVkj/btsNCaUCddK/qj0o5PjBt5z0wKTGJpSX90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oAVkj/btsNCaUCddK/qj0o5PjBt5z0wKTGJpSX90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoAVkj%2FbtsNCaUCddK%2Fqj0o5PjBt5z0wKTGJpSX90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;576&quot; height=&quot;60&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23805d8313eb0b83acea47&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 이번에는 아래의 명령을 실행해보겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c238061896dc6fb84058ecd&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;maxima&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl --context eks-cluster1 \
  exec -ti -n apps deployments/demo-cluster1-v1 -c demo-cluster1-v1 \
	-- curl demo-cluster1.example.com&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238063b45fdf31d70e7cbe&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 명령은 eks-cluster1의 데모 애플리케이션에서 그대로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;eks-cluster1의 데모 애플리케이션으로 요청&lt;/span&gt;을 수행합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380faa323eaa8d107e753&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23808393d4c240ddf85abe&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;그러면 아래와 같은 권한 오류 메시지를 확인할 수 있습니다. &amp;rarr; 실패! &amp;rarr; 이유는? IAMAuthPolicy CR에 의해서 권한이 막혀있음&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380d48dd1ed5fd60703fc&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;elixir&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;AccessDeniedException: User: arn:aws:sts::[AWS_ACCOUNT]:assumed-role/vpc-lattice-sigv4-client/eks-eks-cluste-demo-clust-4f7d25ef-bf0d-4eaf-b54f-5c9863c59729 is not authorized to perform: vpc-lattice-svcs:Invoke on resource: arn:aws:vpc-lattice:ap-northeast-2:[AWS_ACCOUNT]:service/svc-097ea52678cf1ef5b/ because no service-based policy allows the vpc-lattice-svcs:Invoke action%&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238088a625ed994b99d64c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23807d9d17ff7d80fa3b4d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rtdnK/btsNAJcZe4y/PZDCAWKmImuS4rBOBokRO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rtdnK/btsNAJcZe4y/PZDCAWKmImuS4rBOBokRO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rtdnK/btsNAJcZe4y/PZDCAWKmImuS4rBOBokRO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrtdnK%2FbtsNAJcZe4y%2FPZDCAWKmImuS4rBOBokRO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;811&quot; height=&quot;86&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23805680d1d6e4dbd1b9c5&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 에러가 발생하는 이유는, eks-cluster1의 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.gateway-api-controller.eks.aws.dev/dev/api-types/iam-auth-policy/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;IAMAuthPolicy&lt;/a&gt;에서 eks-cluster2 으로만 호출 가능하도록 했기 때문입니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380148895d1315aa9d80b&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23801389b3ca8a67f40745&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;span&gt;&lt;b&gt;IAMAuthPolicy란?&lt;/b&gt;&lt;/span&gt;
&lt;div style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380c1a081ecf1b0637c73&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;IAMAuthPolicy는 Gateway API의 직접 정책 연결(&lt;/b&gt;&lt;b&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://gateway-api.sigs.k8s.io/geps/gep-2648/#gep-2648-direct-policy-attachment&quot;&gt;Direct Policy Attachment&lt;/a&gt;&lt;/b&gt;&lt;b&gt;)을 구현(implements)하는 &lt;/b&gt;&lt;b&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://gateway-api.sigs.k8s.io/geps/gep-713/&quot;&gt;GEP-713: 메타리소스 및 정책 연결&lt;/a&gt;&lt;/b&gt;&lt;b&gt;입니다. IAMAuthPolicy는 Gateway, HTTPRoute 또는 GRPCRoute에 연결될 수 있습니다. (&lt;/b&gt;&lt;b&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://gateway-api.sigs.k8s.io/geps/overview/&quot;&gt;Gateway Enhancement Proposal:GEP&lt;/a&gt;&lt;/b&gt;&lt;b&gt; - 게이트웨이 개선 제안)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380bb86b8dde00f83fa9a&quot;&gt;메타리소스란? - 표준 방식으로 객체(object)의 동작을 확장하는 Kubernetes 객체를 메타리소스 라고 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1e2b8b2c1c23804bb7e3d3dc4316c100&quot; data-ke-size=&quot;size16&quot;&gt;IAMAuthPolicy는 VPC Lattice의 Service Network 또는 Service에 첨부되는 IAM Policy 문서로, 주체(principal)가 첨부된 Service Network의 Service 또는 특정 첨부된 Service에 접근하는 권한을 제어합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380469305d7ba8c890cd3&quot; style=&quot;background-color: #e6e6e5;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;text-align: center;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380618162f5cb041ca563&quot; data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p id=&quot;block-1e2b8b2c1c23805dabd1ef77a3501603&quot; data-ke-size=&quot;size16&quot;&gt;IAMAuthPolicy는 Gateway, HTTPRoute, GRPCRoute를 통해 이동하는 트래픽에 대해서만 권한 부여를 수행할 수 있습니다. 클라이언트가 직접 k8s 서비스 DNS로 트래픽을 전송하는 경우에는 권한 부여가 적용되지 않습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380aa8fc4d55482f27af3&quot; data-ke-size=&quot;size16&quot;&gt;참고 링크&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380e996cbcf36c0c24739&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://aws.amazon.com/ko/blogs/containers/implement-aws-iam-authentication-with-amazon-vpc-lattice-and-amazon-eks/&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;Amazon Web Services &lt;/span&gt;Implement AWS IAM authentication with Amazon VPC Lattice and Amazon EKS | Amazon Web Services&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c23807ca5a4c85a0b8d3c01&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.aws.amazon.com/ko_kr/vpc-lattice/latest/ug/auth-policies.html&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;Amazon VPC Lattice &lt;/span&gt;인증 정책을 사용하여 VPC Lattice 서비스에 대한 액세스 제어 - Amazon VPC Lattice&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380c2a406ebb49599edfc&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.gateway-api-controller.eks.aws.dev/dev/api-types/iam-auth-policy/#introduction&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;IAMAuthPolicy - AWS Gateway API Controller&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23806ba475d68d5f7d99b9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령을 실행해보겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380a69823fe4eada5eb71&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;ruby&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl --context eks-cluster1 \
  get IAMAuthPolicy -n apps demo-cluster1-iam-auth-policy  \
  -o json | jq &quot;.spec.policy | fromjson&quot;
  
{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: [
    {
      &quot;Effect&quot;: &quot;Allow&quot;,
      &quot;Principal&quot;: {
        &quot;AWS&quot;: &quot;arn:aws:iam::[AWS_ACCOUNT]:root&quot;
      },
      &quot;Action&quot;: &quot;vpc-lattice-svcs:Invoke&quot;,
      &quot;Resource&quot;: &quot;*&quot;,
      &quot;Condition&quot;: {
        &quot;StringEquals&quot;: {
          &quot;aws:PrincipalTag/eks-cluster-name&quot;: &quot;eks-cluster2&quot;,
          &quot;aws:PrincipalTag/kubernetes-namespace&quot;: &quot;apps&quot;
        }
      }
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380af837be826e7ff7486&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;위의 정책 내용을 해석하면 아래와 같습니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c238011b65ff8b6e95c8b3c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;VPC Lattice Serivce를 invoke하는 액션 중에서 클러스터 명(eks-cluster-name)이 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;eks-cluster2&lt;/code&gt; 여야하고, 네임스페이스가 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;apps&lt;/code&gt;일 때에만 Invoke를 허용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c238012a3e0dc2326b9a726&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23808488eaf65ac04a4415&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령을 통해 IAMAuthPolicy의 자세한 내용을 확인해보겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380fa843bdd81c047a717&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl --context eks-cluster1 describe IAMAuthPolicy demo-cluster1-iam-auth-policy -n apps
Name:         demo-cluster1-iam-auth-policy
Namespace:    apps
Labels:       app.kubernetes.io/managed-by=Helm
Annotations:  application-networking.k8s.aws/iam-auth-policy-resource-id: svc-097ea52678cf1ef5b
              application-networking.k8s.aws/iam-auth-policy-resource-type: Service
              meta.helm.sh/release-name: demo-cluster1
              meta.helm.sh/release-namespace: apps
API Version:  application-networking.k8s.aws/v1alpha1
Kind:         IAMAuthPolicy
Metadata:
  Creation Timestamp:  2025-04-27T07:26:29Z
  Finalizers:
    application-networking.k8s.aws/iam-auth-policy
  Generation:        1
  Resource Version:  2886
  UID:               3688f2ce-2803-421f-b747-06f5b286d21c
Spec:
  Policy:  {
    &quot;Version&quot;: &quot;2012-10-17&quot;,
    &quot;Statement&quot;: [
        {
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Principal&quot;: {
              &quot;AWS&quot;: &quot;arn:aws:iam::715841333265:root&quot;
            },
            &quot;Action&quot;: &quot;vpc-lattice-svcs:Invoke&quot;,
            &quot;Resource&quot;: &quot;*&quot;,
            &quot;Condition&quot;: {
                &quot;StringEquals&quot;: {
                    &quot;aws:PrincipalTag/eks-cluster-name&quot;: &quot;eks-cluster2&quot;,
                    &quot;aws:PrincipalTag/kubernetes-namespace&quot;: &quot;apps&quot;
                }
            }
        }
    ]
}

  Target Ref:
    Group:      gateway.networking.k8s.io
    Kind:       HTTPRoute
    Name:       demo-cluster1
    Namespace:  apps
Status:
  Conditions:
    Last Transition Time:  2025-04-27T07:26:34Z
    Message:               
    Observed Generation:   1
    Reason:                Accepted
    Status:                True
    Type:                  Accepted
Events:                    &amp;lt;none&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380f4895be9635d257d67&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F45iJ/btsNCytVB4K/ZQgl3O6ctH2nA1e8ipUdh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F45iJ/btsNCytVB4K/ZQgl3O6ctH2nA1e8ipUdh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F45iJ/btsNCytVB4K/ZQgl3O6ctH2nA1e8ipUdh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF45iJ%2FbtsNCytVB4K%2FZQgl3O6ctH2nA1e8ipUdh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;773&quot; height=&quot;732&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;732&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c2380fe9af1c0ac67bb96e4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;해당 IAMAuthPolicy의 적용 대상(Target Ref)이 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;demo-cluster1&lt;/code&gt; 라는 이름을 가진, &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;apps&lt;/code&gt; 네임스페이스의 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;HTTPRoute&lt;/code&gt; 리소스임을 확인할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23804dafb9cc2cd78eaa7d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23807da512c1451f81ac18&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;대상이 되는 HTTPRoute를 조회하기 위해 아래 명령을 수행합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c238055a3d2e7526c93d001&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl --context eks-cluster1 describe HTTPRoute demo-cluster1 -n apps   
           
Name:         demo-cluster1
Namespace:    apps
Labels:       app.kubernetes.io/managed-by=Helm
Annotations:  application-networking.k8s.aws/lattice-assigned-domain-name:
                demo-cluster1-apps-097ea52678cf1ef5b.7d67968.vpc-lattice-svcs.ap-northeast-2.on.aws
              meta.helm.sh/release-name: demo-cluster1
              meta.helm.sh/release-namespace: apps
API Version:  gateway.networking.k8s.io/v1beta1
Kind:         HTTPRoute
Metadata:
  Creation Timestamp:  2025-04-27T07:26:29Z
  Finalizers:
    httproute.k8s.aws/resources
  Generation:        1
  Resource Version:  3625
  UID:               4e261671-c1fd-426e-aeb0-c7b3a1cfa8b2
Spec:
  Hostnames:
    demo-cluster1.example.com
  Parent Refs:
    Group:         gateway.networking.k8s.io
    Kind:          Gateway
    Name:          lattice-gateway
    Namespace:     lattice-gateway
    Section Name:  http-listener
    Group:         gateway.networking.k8s.io
    Kind:          Gateway
    Name:          lattice-gateway
    Namespace:     lattice-gateway
    Section Name:  https-listener-with-custom-domain
  Rules:
    Backend Refs:
      Group:   
      Kind:    Service
      Name:    demo-cluster1-v1
      Port:    80
      Weight:  1
    Matches:
      Path:
        Type:   PathPrefix
        Value:  /
Status:
  Parents:
    Conditions:
      Last Transition Time:  2025-04-27T07:28:50Z
      Message:               
      Observed Generation:   1
      Reason:                Accepted
      Status:                True
      Type:                  Accepted
      Last Transition Time:  2025-04-27T07:28:50Z
      Message:               
      Observed Generation:   1
      Reason:                ResolvedRefs
      Status:                True
      Type:                  ResolvedRefs
    Controller Name:         application-networking.k8s.aws/gateway-api-controller
    Parent Ref:
      Group:         gateway.networking.k8s.io
      Kind:          Gateway
      Name:          lattice-gateway
      Namespace:     lattice-gateway
      Section Name:  http-listener
    Conditions:
      Last Transition Time:  2025-04-27T07:28:50Z
      Message:               
      Observed Generation:   1
      Reason:                Accepted
      Status:                True
      Type:                  Accepted
      Last Transition Time:  2025-04-27T07:28:50Z
      Message:               
      Observed Generation:   1
      Reason:                ResolvedRefs
      Status:                True
      Type:                  ResolvedRefs
    Controller Name:         application-networking.k8s.aws/gateway-api-controller
    Parent Ref:
      Group:         gateway.networking.k8s.io
      Kind:          Gateway
      Name:          lattice-gateway
      Namespace:     lattice-gateway
      Section Name:  https-listener-with-custom-domain
Events:
  Type    Reason           Age                 From       Message
  ----    ------           ----                ----       -------
  Normal  Retry-Reconcile  44m (x7 over 45m)   httproute  retry reconcile...
  Normal  Reconcile        43m (x10 over 45m)  httproute  Adding/Updating Reconcile
  Normal  DeploySucceed    43m (x3 over 44m)   httproute  Adding/Updating reconcile Done!&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238031b63ed9d7abe75512&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380b6abc7fc824bad2a4c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 HTTPRoute 설정을 통해 라우팅 되는 대상을 아래와 같이 확인할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c238028b60af88806b67832&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;593&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bigiZb/btsNCeCra6g/OkXGFrH97hWskeL98LkNT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bigiZb/btsNCeCra6g/OkXGFrH97hWskeL98LkNT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bigiZb/btsNCeCra6g/OkXGFrH97hWskeL98LkNT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbigiZb%2FbtsNCeCra6g%2FOkXGFrH97hWskeL98LkNT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;847&quot; height=&quot;593&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;593&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c2380c1b65edf98e3b795d4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;HTTPRoute로 라우팅 되는 대상이 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;demo-cluster1-v1&lt;/code&gt; 이라는 Service임을 알 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380019f6cdecac9ac0b2b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238028b151f89769de7821&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;마찬가지로 아래 명령을 통해 해당 Service 명세를 확인해보겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23802ea1f9dffbc06b5384&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;# Gateway API의 HTTPRoute에서 route 되는 target service이다.
kubectl describe svc demo-cluster1-v1 -n apps

Name:                     demo-cluster1-v1
Namespace:                apps
Labels:                   app.kubernetes.io/managed-by=Helm
Annotations:              meta.helm.sh/release-name: demo-cluster1
                          meta.helm.sh/release-namespace: apps
Selector:                 app=demo-cluster1-v1
Type:                     ClusterIP
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       172.20.190.76
IPs:                      172.20.190.76
Port:                     &amp;lt;unset&amp;gt;  80/TCP
TargetPort:               8090/TCP
Endpoints:                10.0.18.13:8090
Session Affinity:         None
Internal Traffic Policy:  Cluster
Events:                   &amp;lt;none&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380549e2fc45cfb54f1bd&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOtaqS/btsNBxCvAeD/pULiKrXpYHB0k7zWWS1MG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOtaqS/btsNBxCvAeD/pULiKrXpYHB0k7zWWS1MG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOtaqS/btsNBxCvAeD/pULiKrXpYHB0k7zWWS1MG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOtaqS%2FbtsNBxCvAeD%2FpULiKrXpYHB0k7zWWS1MG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;257&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c23809e864cc8023e659c07&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 Service를 통해 라우팅 되는 대상이 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;10.0.26.50:8090&lt;/code&gt; 임을 확인할 수 있습니다. (&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;demo-cluster1-v1&lt;/code&gt;)&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23808b8be5f82562ca3b1d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23807c933fc517de0c559c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이어서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VPC 콘솔 &amp;gt; PrivateLink and Lattice &amp;gt; Lattice service &lt;/span&gt;로 이동하여 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;demo-cluster1-apps&lt;/code&gt;의 체크박스를 클릭하고, Routing 탭을 클릭하면 아래와 같이 라우팅 대상 그룹을 확인할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23801b9dc7cc1b89eb9d02&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;911&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V43tY/btsNCokMRPw/qQe1P6GiVk7b3OIb6PYiN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V43tY/btsNCokMRPw/qQe1P6GiVk7b3OIb6PYiN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V43tY/btsNCokMRPw/qQe1P6GiVk7b3OIb6PYiN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV43tY%2FbtsNCokMRPw%2FqQe1P6GiVk7b3OIb6PYiN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1248&quot; height=&quot;911&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;911&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380ccb180fd193092986d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;539&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K9tC8/btsNBFm1VI4/88i6DKknTTfmgzs3ReFRyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K9tC8/btsNBFm1VI4/88i6DKknTTfmgzs3ReFRyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K9tC8/btsNBFm1VI4/88i6DKknTTfmgzs3ReFRyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK9tC8%2FbtsNBFm1VI4%2F88i6DKknTTfmgzs3ReFRyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;539&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;539&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c2380f3a0fdf53c5885ed11&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 내 실습 환경 캡쳐&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380429524d93c6df0c649&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;685&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boUtLj/btsNCytVDiS/r7tBKPhndkF6VQ4xRn276K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boUtLj/btsNCytVDiS/r7tBKPhndkF6VQ4xRn276K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boUtLj/btsNCytVDiS/r7tBKPhndkF6VQ4xRn276K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboUtLj%2FbtsNCytVDiS%2Fr7tBKPhndkF6VQ4xRn276K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;655&quot; height=&quot;685&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;685&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380cca4d9d727f6a23d8c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;451&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBScT8/btsNAh1Qyq1/Nn6gVHCdRo7LQBwG6N1HVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBScT8/btsNAh1Qyq1/Nn6gVHCdRo7LQBwG6N1HVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBScT8/btsNAh1Qyq1/Nn6gVHCdRo7LQBwG6N1HVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBScT8%2FbtsNAh1Qyq1%2FNn6gVHCdRo7LQBwG6N1HVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;451&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;451&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1e2b8b2c1c23804ca97cf934aa56a487&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 내 실습 환경 캡쳐&lt;/p&gt;
&lt;p class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-&amp;gt; 위에서 describe를 통해서 확인했던 service의 endpoints로 등록된 pod의 ip주소가 registered targets으로 등록이 되어있는것을 볼 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380628491d95f3e3a1a40&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238030928ddebb2c2fd56a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;결과적으로 이 데모 애플리케이션 Pod가 IAMAuthPolicy의 규칙을 적용받고 있음을 확인할 수 있습니다.&lt;/p&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380098889ececed0a5a0d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 IAMAuthPolicy를 사용하면 멀티 클러스터 간에 각 애플리케이션에 대한 액세스 제어를 쉽게 구성할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380f298a4de51af92a176&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23808db1d1ebede2b83b9f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;6.3.2. Kyverno의 역할&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380fcae36f831051bb1d6&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이번 실습에서는 Kyverno의 ClusterPolicy를 사용하여 데모 애플리케이션 Pod에 iptables 규칙과 envoy 사이드카 프록시를 주입했습니다:&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380149311fd7e29ceeea0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;iptables 규칙은 애플리케이션에서 envoy 프록시로 트래픽을 라우팅합니다(소스 프로세스 gid가 0인 경우 규칙이 적용되지 않으므로 애플리케이션에 다른 gid를 제공합니다: runAsGroup: 1000).&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380ec860ec36ee204f3e4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;envoy 프록시는 시작 시 Private CA 인증서를 검색하여 시작 스크립트를 통해 VPC lattice 서비스를 신뢰하도록 설치합니다:&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380ceabdae1d62edb7ea1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23800b8aaeff682c76da33&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령을 수행하여 envoy 프록시 컨테이너가 뜰 때 실행하는 스크립트를 참조합니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380e098b8d61f458454b9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;applescript&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;kubectl --context eks-cluster1 \
	exec -it deploy/demo-cluster1-v1 -c envoy-sigv4 -n apps \
	-- cat /usr/local/bin/launch_envoy.sh&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238017b636f1d261b081b8&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: #e6e6e5; display: flex; margin-top: 2px; margin-bottom: 4px; border-image: none 100% / 1 / 0 stretch; overflow: hidden; padding: 16px 16px 16px 11.2px; border-radius: 3px; box-shadow: none; border: 1px solid #e6e6e5;&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: #7d7c78;&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 987.016px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380068b8fca0b695f9dfc&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 데모에서 사용된 envoy 프록시, iptables 및 http-server 이미지를 만드는 데 사용된 Dockerfile은 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/aws-samples/amazon-eks-security-immersion-day/tree/mainline/docker&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;여기&lt;/a&gt;에서 찾을 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23800cab53c8bf0b1731c7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23807d9761ee2f4c49f82c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;출력 결과는 아래와 같습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c238067b0e3eac380428e99&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;bash&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;#!/bin/sh

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT-0

cat /etc/envoy/envoy.yaml.in | envsubst \$AWS_REGION,\$JWT_AUDIENCE,\$JWT_JWKS,\$JWT_ISSUER,\$JWKS_HOST,\$APP_DOMAIN &amp;gt; /etc/envoy/envoy.yaml
aws acm-pca get-certificate-authority-certificate --certificate-authority-arn $CA_ARN --region $AWS_REGION --output text &amp;gt; /etc/pki/ca-trust/source/anchors/internal.pem
update-ca-trust extract

cat /etc/envoy/envoy.yaml
/usr/local/bin/envoy --base-id 1 -l trace -c /etc/envoy/envoy.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238003bb97d3336d267e43&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;설명&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380bd9b57df866e251cbe&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;1. 환경 변수 치환을 통한 Envoy 구성 파일 생성&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380ec8ba5c765bc92f40f&quot; class=&quot;notion-code&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;elixir&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;cat /etc/envoy/envoy.yaml.in | envsubst \$AWS_REGION,\$JWT_AUDIENCE,\$JWT_JWKS,\$JWT_ISSUER,\$JWKS_HOST,\$APP_DOMAIN &amp;gt; /etc/envoy/envoy.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c238088be80fbe863762388&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;템플릿 파일(&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;envoy.yaml.in&lt;/code&gt;)을 읽어서&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380f19ec0e26893dcce33&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;환경 변수들(&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;AWS_REGION&lt;/code&gt;,&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;JWT_AUDIENCE&lt;/code&gt;,&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;JWT_JWKS&lt;/code&gt;,&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;JWT_ISSUER&lt;/code&gt;,&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;JWKS_HOST&lt;/code&gt;,&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;APP_DOMAIN&lt;/code&gt;)을 실제 값으로 대체&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380e9b760fd9f30568490&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;결과를 Envoy 구성 파일(&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/etc/envoy/envoy.yaml&lt;/code&gt;)로 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c23803caac5e7fcdd6adb7f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23805ebca3f44715c050f4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;2. AWS 사설 인증 기관(PCA)에서 인증서 가져오기&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380f58efce7aff9d7c198&quot; class=&quot;notion-code&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dsconfig&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;aws acm-pca get-certificate-authority-certificate --certificate-authority-arn $CA_ARN --region $AWS_REGION --output text &amp;gt; /etc/pki/ca-trust/source/anchors/internal.pem&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23803badffddbf2e4ede10&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;AWS 명령줄 도구를 사용하여 지정된 인증 기관(CA)에서 인증서를 가져옴&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380239ccfd7d431650793&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;$CA_ARN&lt;/code&gt;&amp;nbsp;환경 변수에 지정된 인증 기관의 Amazon 리소스 이름을 사용&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c23805e9538e3112bc0271c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;획득한 인증서를 시스템의 신뢰 저장소 경로에 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380eab4bceb367bdccdff&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238003a91eff66ae12c872&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;3. 시스템 인증서 신뢰 저장소 업데이트&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23805b88c3e695f89f8c46&quot; class=&quot;notion-code&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;sql&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;update-ca-trust extract&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c238030b541c10ed7208a15&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;방금 추가한 인증서를 시스템이 신뢰하도록 CA 신뢰 저장소를 갱신&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c238071acd0f31724802594&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238049b35dc1364987ad0d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;4. 구성 파일 내용 출력 (디버깅 용도)&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c238077a68ddb71cee97e4b&quot; class=&quot;notion-code&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;awk&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;cat /etc/envoy/envoy.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380638bc2da85f3721bdb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;생성된 Envoy 구성 파일의 내용을 출력하여 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c23808ba566d697146ef44f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23805ba322ece5440523d8&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;5. Envoy 프록시 실행&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380489849f37f1dd0a8c4&quot; class=&quot;notion-code&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;awk&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;/usr/local/bin/envoy --base-id 1 -l trace -c /etc/envoy/envoy.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23805b8246e25f79942a85&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Envoy 프록시를 시작&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380c3b9eef5643777fc4d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;--base-id 1&lt;/code&gt;: 기본 ID 설정 (여러 Envoy 인스턴스 구분용)&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c238026876cf0aa7eaa78e9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;-l trace&lt;/code&gt;: 로그 레벨을 trace로 설정하여 상세 로깅 활성화&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380fda77cdbbeb2aacbb6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;-c /etc/envoy/envoy.yaml&lt;/code&gt;: 앞서 생성한 구성 파일을 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c238074a2b7ef38393e3cf1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23807aa231ddb6857d6693&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 스크립트의 주요 목적은 AWS VPC Lattice 서비스와 안전하게 통신하기 위해 필요한 인증서를 설정하고, 환경에 맞게 구성된 Envoy 프록시를 실행하는 것입니다. SigV4 인증을 사용하여 AWS 서비스에 대한 요청에 서명하는 프로세스를 자동화합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23801a9fe9df72b180c9a1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380749e33e30c962c4125&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;launch_envoy.sh&lt;/code&gt;에서 활용한 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;envoy.yaml.in&lt;/code&gt; 스크립트도 함께 살펴보겠습니다. 해당 스크립트는 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: #7d7c78; color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/aws-samples/amazon-eks-security-immersion-day/blob/mainline/docker/envoy/envoy.yaml.in&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;여기서 참조&lt;/a&gt;할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380cfbf88d3fc48fbe06d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238032ad85f7b229ca24cd&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;envoy.yaml.in&lt;/code&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c238096b6a4fff29354cd64&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;static_resources:
  listeners:
  - name: http_connect
    address:
      socket_address:
        protocol: TCP
        address: 0.0.0.0
        port_value: 8080
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        typed_config:
          &quot;@type&quot;: type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains:
              - &quot;*&quot;
              routes:
              - match:
                  prefix: '/'
                route:
                  cluster: outbound_proxy
          # Ignore traffic to /health and respond with a 200
          http_filters:
          - name: envoy.filters.http.dynamic_forward_proxy
            typed_config:
              &quot;@type&quot;: type.googleapis.com/envoy.extensions.filters.http.dynamic_forward_proxy.v3.FilterConfig
              dns_cache_config:
                name: dynamic_forward_proxy_cache_config
                dns_lookup_family: V4_ONLY
                typed_dns_resolver_config:
                  name: envoy.network.dns_resolver.cares
                  typed_config:
                    &quot;@type&quot;: type.googleapis.com/envoy.extensions.network.dns_resolver.cares.v3.CaresDnsResolverConfig
                    use_resolvers_as_fallback: true
                    resolvers:
                    - socket_address:
                        address: &quot;127.0.0.1&quot;
                        port_value: 53
                    dns_resolver_options:
                      use_tcp_for_dns_lookups: true
                      no_default_search_domain: true
          # SigV4 signing configuration
          - name: envoy.filters.http.aws_request_signing
            typed_config:
              &quot;@type&quot;: type.googleapis.com/envoy.extensions.filters.http.aws_request_signing.v3.AwsRequestSigning
              service_name: vpc-lattice-svcs
              region: ${AWS_REGION}
              use_unsigned_payload: true
              match_excluded_headers:
              - prefix: x-envoy
              - prefix: x-forwarded
              - exact: x-amzn-trace-id
          - name: envoy.filters.http.router
            typed_config:
              &quot;@type&quot;: type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
  clusters:
  - name: outbound_proxy
    lb_policy: CLUSTER_PROVIDED
    cluster_type:
      name: envoy.clusters.dynamic_forward_proxy
      typed_config:
        &quot;@type&quot;: type.googleapis.com/envoy.extensions.clusters.dynamic_forward_proxy.v3.ClusterConfig
        dns_cache_config:
          name: dynamic_forward_proxy_cache_config
          dns_lookup_family: V4_ONLY
          typed_dns_resolver_config:
            name: envoy.network.dns_resolver.cares
            typed_config:
              &quot;@type&quot;: type.googleapis.com/envoy.extensions.network.dns_resolver.cares.v3.CaresDnsResolverConfig
              use_resolvers_as_fallback: true
              resolvers:
              - socket_address:
                  address: &quot;127.0.0.1&quot;
                  port_value: 53
              dns_resolver_options:
                use_tcp_for_dns_lookups: true
                no_default_search_domain: true
    transport_socket:
      name: envoy.transport_sockets.tls
      typed_config:
        &quot;@type&quot;: type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
        common_tls_context:
          validation_context:
            trusted_ca:
              filename: /etc/ssl/certs/ca-bundle.crt&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380eda13bcd21254b1524&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;설명&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e2b8b2c1c238021ad4be4daa66802f8&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 YAML 파일은 Envoy 프록시의 구성을 정의하며, 특히 AWS VPC Lattice 서비스와의 안전한 통신을 위해 설계되었습니다. 주요 부분별로 설명하겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380d9b2c8ce8e263a3c55&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238043a54ec41cb838f4fa&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;1. Listeners (리스너) 구성&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c238064bf8ccf0a6450fdd3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;listeners:
  - name: http_connect
    address:
      socket_address:
        protocol: TCP
        address: 0.0.0.0
        port_value: 8080&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c238009aa57d0407f5bcdbe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;name: http_connect&lt;/code&gt;: 리스너의 이름을 정의&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c23800da49af391594cb29d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;address&lt;/code&gt;: 모든 네트워크 인터페이스(&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;0.0.0.0&lt;/code&gt;)의 8080 포트에서 TCP 연결을 수신함&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380d1bbe4d00d29f2a552&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23809db2c1f193cf564d69&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;2. HTTP 연결 관리자 및 라우팅 설정&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c238071852be48d021f9e2a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;less&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;filter_chains:
- filters:
  - name: envoy.filters.network.http_connection_manager
    typed_config:
      ...
      route_config:
        name: local_route
        virtual_hosts:
        - name: local_service
          domains: [&quot;*&quot;]
          routes:
          - match: { prefix: '/' }
            route: { cluster: outbound_proxy }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23805f87bafc0a2901a699&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;모든 도메인(&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;*&lt;/code&gt;)에 대한 HTTP 요청을 처리&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380f0a1fcf4f923b7353e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;모든 경로(&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/&lt;/code&gt;)로 시작하는 요청을&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;outbound_proxy&lt;/code&gt;&amp;nbsp;클러스터로 라우팅&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380659d2ee4d136d21fdf&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23808e8ffde924c3bbdacc&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;3. 동적 포워드 프록시 필터&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380449204e050fd63e7cb&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;less&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;http_filters:
- name: envoy.filters.http.dynamic_forward_proxy
  typed_config:
    ...
    dns_cache_config:
      name: dynamic_forward_proxy_cache_config
      dns_lookup_family: V4_ONLY&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c238039a0bcef3444b4733e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청 중 호스트 이름을 동적으로 확인하는 필터&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380f4afa3c5be102edd7b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;IPv4 주소만 사용하도록 구성됨&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380f481ecf9e16de43114&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;로컬 DNS 리졸버(127.0.0.1:53)를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380ce9a0ad5aebd848361&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380569d29fce507fc6ebb&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;4. AWS SigV4 서명 필터&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c238094b09dc0c13204d312&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;- name: envoy.filters.http.aws_request_signing
  typed_config:
    ...
    service_name: vpc-lattice-svcs
    region: ${AWS_REGION}
    use_unsigned_payload: true
    match_excluded_headers:
    - prefix: x-envoy
    - prefix: x-forwarded
    - exact: x-amzn-trace-id&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380dbb2c7c567755e6289&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;AWS Signature Version 4(SigV4) 알고리즘을 사용하여 요청에 서명&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c238060bb09c71b17dc62b6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;VPC Lattice 서비스(&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;vpc-lattice-svcs&lt;/code&gt;)로 가는 요청에 서명&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c23806ba75fe5cab6f70055&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;환경 변수&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;${AWS_REGION}&lt;/code&gt;을 통해 AWS 리전 지정&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c23800b8fc1f5cb7be644b9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;특정 헤더는 서명 프로세스에서 제외됨&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c238062b719ebfbbca5905a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380fda684c88d402199c1&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;5. 라우터 필터&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23807ab1fbe1d22ab57713&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;- name: envoy.filters.http.router
  typed_config:
    &quot;@type&quot;: type.googleapis.com/envoy.extensions.filters.http.router.v3.Router&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23803c8ed3d7806773f470&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;구성된 라우트에 따라 요청을 업스트림 클러스터로 전달하는 필수 필터&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380b28feec5af53941cdb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380508419f57c56ff7b27&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;6. 클러스터 구성&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380d4b7eff9c76c4ddd17&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;less&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;clusters:
- name: outbound_proxy
  lb_policy: CLUSTER_PROVIDED
  cluster_type:
    name: envoy.clusters.dynamic_forward_proxy
    ...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23809b984edd9ff5ae32c1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;outbound_proxy&lt;/code&gt;&amp;nbsp;클러스터는 동적 포워드 프록시로 동작&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c238003833cea9b451c95d6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;동적으로 호스트를 발견하고 연결 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380ee852dd805e67bc688&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380e1b88fe2c089a7ef59&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;7. TLS 설정&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c238012b543f567c6207e0c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dts&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;transport_socket:
  name: envoy.transport_sockets.tls
  typed_config:
    ...
    common_tls_context:
      validation_context:
        trusted_ca:
          filename: /etc/ssl/certs/ca-bundle.crt&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380f58c67c7fe545cf0a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;업스트림 서비스(VPC Lattice)와 통신할 때 TLS를 사용&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380a7a9baf38ce8e25bd5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;시스템의 CA 인증서 번들을 사용하여 서버 인증서 검증&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h2 id=&quot;block-1e2b8b2c1c2380d28b40fea388d60d83&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px; padding: 3px 2px; position: relative; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-size: 24px; margin-top: 1rem;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;box-sizing: border-box;&quot;&gt;요약&lt;/span&gt;&lt;/h2&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380d38e4bf1c0b9a39e77&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;8080 포트에서 HTTP 요청 수신&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c238058a427ff8be8c0388f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;모든 요청을 동적 DNS 조회를 통해 해당 서비스로 전달&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380008329f1925ae5f3e3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;AWS VPC Lattice로 가는 요청에 SigV4 인증 서명 적용&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c238006a8b0fb3cde511811&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;TLS를 사용하여 안전한 통신 보장&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c238060b067efeab56c9a5b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380a2a5b4f171546a33fd&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380688e93e0072bbea626&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;envoy의 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Dockerfile&lt;/code&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380abb6e7f33e96663b0f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dockerfile&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;FROM envoyproxy/envoy:distroless-v1.30.0 as envoy

FROM public.ecr.aws/amazonlinux/amazonlinux:latest
RUN yum -y update &amp;amp;&amp;amp; \
    yum clean all &amp;amp;&amp;amp; \
    rm -rf /var/cache/yum

COPY --from=envoy /usr/local/bin/envoy /usr/local/bin/envoy
RUN yum install -y python3 jq tar bind-utils procps gettext which unzip tar less util-linux
RUN curl &quot;https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip&quot; -o &quot;awscliv2.zip&quot; &amp;amp;&amp;amp; \
    unzip awscliv2.zip &amp;amp;&amp;amp; \
    ./aws/install

COPY envoy.yaml.in /etc/envoy/envoy.yaml.in
COPY launch_envoy.sh /usr/local/bin/launch_envoy.sh

RUN chmod 755 /usr/local/bin/launch_envoy.sh
ENTRYPOINT [&quot;launch_envoy.sh&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c23802e8227c28a03f44d27&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;설명&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380beaaeaf59b2878ce55&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 Dockerfile은 AWS VPC Lattice와 통신하기 위한 사용자 정의 Envoy 프록시 이미지를 생성합니다. 주요 부분별로 살펴보겠습니다.&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c23801480b7fb72cf7bd1ab&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380c487d2c5b87928038f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;1. 멀티 스테이지 빌드 설정&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380929c8fe9452ee49e00&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;groovy&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;FROM envoyproxy/envoy:distroless-v1.30.0 as envoy

FROM public.ecr.aws/amazonlinux/amazonlinux:latest&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c238093b113f5f09e14ebc6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;첫 번째 단계: 공식 Envoy 프록시의 distroless 버전을&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;envoy&lt;/code&gt;라는 별칭으로 가져옵니다.&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c238072ab33e4e0fb2d2732&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;두 번째 단계: Amazon Linux를 최종 기본 이미지로 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c23803b936ec37b49f5e591&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238018923bc6b5fa0e3589&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;2. 시스템 패키지 업데이트&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380a382a2f124a4fb0bb9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;sas&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;RUN yum -y update &amp;amp;&amp;amp; \
    yum clean all &amp;amp;&amp;amp; \
    rm -rf /var/cache/yum&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c238082a26df34e8f0dded1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;시스템 패키지를 최신 상태로 업데이트하고&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380038123c7314e095516&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;패키지 캐시를 정리하여 이미지 크기를 최적화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c23802aa78aff22f98167fc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c238051bcbbe494b3a11778&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;3. Envoy 바이너리 복사&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380dfa06ec5bffe90ee86&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;gradle&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;COPY --from=envoy /usr/local/bin/envoy /usr/local/bin/envoy&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23808491a0c3af5895ee82&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;첫 번째 단계(distroless Envoy)에서 Envoy 실행 파일만 추출하여 현재 이미지로 복사합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380499bd7fec853268b30&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380ed9ae3f0be1eb866f4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;4. 필수 도구 설치&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380e29ab7e445284b0d2b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dockerfile&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;RUN yum install -y python3 jq tar bind-utils procps gettext which unzip tar less util-linux&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23801d981bc81febb9102e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 도구들을 설치합니다:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c238047a7d1f6b9d91299ef&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;python3&lt;/code&gt;: Python 스크립트 실행용&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c23800c9567cb1f80512e98&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;jq&lt;/code&gt;: JSON 처리 도구&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380e08b2bd53f54f5cd8d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;bind-utils&lt;/code&gt;: DNS 조회 도구(dig, nslookup 등)&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380c89ec0f58d9624bc24&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;gettext&lt;/code&gt;: 환경 변수 치환 도구(envsubst)&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c23803faa81e7ab9a441a66&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;procps&lt;/code&gt;: 프로세스 관리 도구&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c238010aab1f0523818ec6b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그 외 여러 유틸리티 도구들&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c238008b49ffa33adf19f5f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380d7bbcbe69e411a962a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;5. AWS CLI 설치&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c238009a9a1c77319ed08ac&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;sas&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;RUN curl &quot;https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip&quot; -o &quot;awscliv2.zip&quot; &amp;amp;&amp;amp; \
    unzip awscliv2.zip &amp;amp;&amp;amp; \
    ./aws/install&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c238044b7d9d0e04eeb8c90&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;AWS 명령줄 인터페이스(CLI) 버전 2를 다운로드하고 설치&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c238092a147fc616d898acf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;AWS 서비스(특히 인증서 관리)와의 상호작용에 필요합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380e58db5f04ee74c69f4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c23804b8a9ddb8fc0def5af&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;6. Envoy 구성 파일 및 시작 스크립트 복사&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380fbbcadec721f255b7a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dockerfile&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;COPY envoy.yaml.in /etc/envoy/envoy.yaml.in
COPY launch_envoy.sh /usr/local/bin/launch_envoy.sh&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23802d9af1ef0e078af42b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;envoy.yaml.in&lt;/code&gt;: 이전에 살펴본 Envoy 구성의 템플릿 파일을 복사&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c238081ad00f8624f01b7a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;launch_envoy.sh&lt;/code&gt;: 이전에 설명한 시작 스크립트를 복사&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c23807c9cccdaec8df7dee9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1e2b8b2c1c2380a49067db83be546f8b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;7. 실행 권한 설정 및 시작점 정의&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380438f21fa0a1a34ccb6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dockerfile&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;RUN chmod 755 /usr/local/bin/launch_envoy.sh
ENTRYPOINT [&quot;launch_envoy.sh&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380f6a9befaea54e70140&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;시작 스크립트에 실행 권한을 부여&lt;/li&gt;
&lt;li id=&quot;block-1e2b8b2c1c23800393a3f64a89ab8c58&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;컨테이너가 시작될 때 자동으로&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: rgba(135, 131, 120, 0.15); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;launch_envoy.sh&lt;/code&gt;&amp;nbsp;스크립트를 실행하도록 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380ddaec5d1bbfb92fcb9&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;6.4. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;실습 리소스 정리&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c23806eae66d85927310974&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 정리&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c23800c83efd76d77e88236&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;stata&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;cd /workshop/terraform-aws-eks-blueprints/patterns/vpc-lattice/cross-cluster-pod-communication/cluster/

./destroy.sh cluster2

./destroy.sh cluster1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e2b8b2c1c2380a08320c31a4d9638da&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e2b8b2c1c2380308b9ee56092e913db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;environment 환경 정리&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e2b8b2c1c238046bbecc18e207d5f68&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background: none 0% 0% / auto repeat scroll padding-box border-box #ffffff; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-block: unset; overflow-clip-margin: unset; overflow-inline: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-marker-group: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;dsconfig&quot; style=&quot;box-sizing: border-box; color: black; background-color: rgba(135, 131, 120, 0.15); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: 32px; border-radius: 5px;&quot;&gt;&lt;code&gt;SN=$(aws vpc-lattice list-service-networks --query 'items[?name==`lattice-gateway`].id' --output text)
if [ -n &quot;$SN&quot; ]; then
    aws vpc-lattice delete-service-network --service-network-id &quot;$SN&quot;
fi

cd /workshop/terraform-aws-eks-blueprints/patterns/vpc-lattice/cross-cluster-pod-communication/environment/

terraform destroy -auto-approve&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>AWS</category>
      <author>ManMan</author>
      <guid isPermaLink="true">https://gylee815.tistory.com/32</guid>
      <comments>https://gylee815.tistory.com/32#entry32comment</comments>
      <pubDate>Sun, 27 Apr 2025 00:33:52 +0900</pubDate>
    </item>
    <item>
      <title>[IHOS 1기] 3주차 - Traffic control, Resilience</title>
      <link>https://gylee815.tistory.com/31</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. Traffic control: Fine-grained traffic routing&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1deb8b2c1c23801fadcef8d592ff6c8e&quot;&gt;&lt;b&gt;Traffic routing&lt;/b&gt; basics&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238024a140eaea5c1febf6&quot;&gt;&lt;b&gt;Shifting traffic&lt;/b&gt; during a &lt;b&gt;new release&lt;/b&gt;&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238078b749cdbe85fd9011&quot;&gt;&lt;b&gt;Mirroring traffic&lt;/b&gt; to reduce the risk of a new release&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380e0b763cf45cf7a58d7&quot;&gt;&lt;b&gt;Controlling traffic&lt;/b&gt; as it &lt;b&gt;leaves&lt;/b&gt; a cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1deb8b2c1c2380c581f9c81cb401ec3b&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;들어가며 : &lt;span style=&quot;color: #787673;&quot;&gt;&lt;span style=&quot;color: #37352f;&quot;&gt;트래픽 세부 라우팅 필요 설명&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1deb8b2c1c2380628df3f26a6d5ef8c4&quot;&gt;이전 장에서 우리는 트래픽을 클러스터로 가져오는 방법과 이를 위해 고려해야 할 사항들을 살펴보았습니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380289250e9b8c7be1826&quot;&gt;요청이 클러스터에 들어오면, 요청을 처리하기 위해 적절한 서비스로 어떻게 라우팅되나요?&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238081b680e0c673550764&quot;&gt;클러스터 내에 있는 서비스는 같은 클러스터 내 또는 클러스터 외부에 있는 다른 서비스와 어떻게 통신하나요?&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238001ad3aea4abdadafa4&quot;&gt;마지막으로, 그리고 가장 중요한 것은 서비스를 변경하고 새로운 버전을 도입할 때, 고객과 고객이 이러한 변화에 안전하게 노출될 수 있도록 방해와 영향을 최소화하는 방법은 무엇일까요?&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380c2b2d7db6307203097&quot;&gt;앞서 살펴본 바와 같이, Istio 서비스 프록시는 서비스 메시 클러스터 내의 서비스 간 통신을 차단하고 트래픽을 제어할 수 있는 지점을 제공합니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380e6b9a9fc45609788a1&quot;&gt;Istio를 사용하면 애플리케이션 간의 트래픽을 개별 요청까지 세밀하게 제어할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380359c2dc2939bfeace8&quot;&gt;이 장에서는 왜 그렇게 하고 싶은지, 어떻게 해야 하는지, 그리고 이러한 기능을 활용할 때 어떤 이점을 얻어야 하는지 살펴봅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dfb8b2c1c23808c86d3e18ceb424ea9&quot;&gt;
&lt;div&gt;
&lt;p id=&quot;block-1dfb8b2c1c2380bfab08c362a9b8eedd&quot; data-ke-size=&quot;size16&quot;&gt;5.0. 실습환경 구성&lt;/p&gt;
&lt;p id=&quot;block-1dfb8b2c1c2380969929c003bc6b59a6&quot; data-ke-size=&quot;size16&quot;&gt;5.0.1. &lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;[실습 환경 구성] &lt;/b&gt;&lt;/span&gt;&lt;b&gt;k8s(1.23.17) 배포&lt;/b&gt; : NodePort(&lt;span style=&quot;color: #347da8;&quot;&gt;30000&lt;/span&gt; &lt;b&gt;HTTP&lt;/b&gt;, &lt;span style=&quot;color: #d34a45;&quot;&gt;30005&lt;/span&gt; &lt;b&gt;HTTPS&lt;/b&gt;)&lt;/p&gt;
&lt;div id=&quot;block-1dfb8b2c1c2380ba9b14fb4ff23debe2&quot;&gt;Copy
&lt;pre class=&quot;sql&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;#
git clone https://github.com/AcornPublishing/istio-in-action
cd istio-in-action/book-source-code-master
pwd # 각자 자신의 pwd 경로
code .

# 아래 extramounts 생략 시, myk8s-control-plane 컨테이너 sh/bash 진입 후 직접 git clone 가능
kind create cluster --name myk8s --image kindest/node:v1.23.17 --config - &amp;lt;https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30007 --set env.TZ=&quot;Asia/Seoul&quot; --namespace kube-system
kubectl get deploy,pod,svc,ep -n kube-system -l app.kubernetes.io/instance=kube-ops-view

## kube-ops-view 접속 URL 확인
open &quot;http://localhost:30007/#scale=1.5&quot;
open &quot;http://localhost:30007/#scale=1.3&quot;

# (옵션) metrics-server
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm install metrics-server metrics-server/metrics-server --set 'args[0]=--kubelet-insecure-tls' -n kube-system
kubectl get all -n kube-system -l app.kubernetes.io/instance=metrics-server
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dfb8b2c1c2380898e6ce7aca5a1b979&quot; data-ke-size=&quot;size16&quot;&gt;5.0.2. &lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;[실습 환경 구성] &lt;/b&gt;&lt;/span&gt;&lt;b&gt;istio 1.17.8 설치&lt;/b&gt; (addon 필수) - &lt;a style=&quot;color: #000000;&quot; href=&quot;https://istio.io/v1.17/docs/&quot;&gt;Docs&lt;/a&gt; , &lt;a style=&quot;color: #000000;&quot; href=&quot;https://istio.io/v1.17/docs/setup/install/istioctl/&quot;&gt;Install&lt;/a&gt; , &lt;a style=&quot;color: #000000;&quot; href=&quot;https://istio.io/v1.17/docs/setup/additional-setup/config-profiles/&quot;&gt;profile&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1deb8b2c1c238040b498c087bd53445f&quot;&gt;Copy
&lt;pre class=&quot;jboss-cli&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;# myk8s-control-plane 진입 후 설치 진행
docker exec -it myk8s-control-plane bash
-----------------------------------
# (옵션) 코드 파일들 마운트 확인
tree /istiobook/ -L 1
혹은
git clone ... /istiobook

# istioctl 설치
export ISTIOV=1.17.8
echo 'export ISTIOV=1.17.8' &amp;gt;&amp;gt; /root/.bashrc

curl -s -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIOV sh -
cp istio-$ISTIOV/bin/istioctl /usr/local/bin/istioctl
istioctl version --remote=false

# default 프로파일 컨트롤 플레인 배포
istioctl install --set profile=default -y

# 설치 확인 : istiod, istio-ingressgateway, crd 등
kubectl get istiooperators -n istio-system -o yaml
kubectl get all,svc,ep,sa,cm,secret,pdb -n istio-system
kubectl get cm -n istio-system istio -o yaml
kubectl get crd | grep istio.io | sort

# 보조 도구 설치
kubectl apply -f istio-$ISTIOV/samples/addons
kubectl get pod -n istio-system

# 빠져나오기
exit
-----------------------------------

# 실습을 위한 네임스페이스 설정
kubectl create ns istioinaction
kubectl label namespace istioinaction istio-injection=enabled
kubectl get ns --show-labels

# istio-ingressgateway 서비스 : NodePort 변경 및 nodeport 지정 변경 , externalTrafficPolicy 설정 (ClientIP 수집)
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 8080, &quot;nodePort&quot;: 30000}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 443, &quot;targetPort&quot;: 8443, &quot;nodePort&quot;: 30005}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;:{&quot;externalTrafficPolicy&quot;: &quot;Local&quot;}}'
kubectl describe svc -n istio-system istio-ingressgateway

# NodePort 변경 및 nodeport 30001~30003으로 변경 : prometheus(30001), grafana(30002), kiali(30003), tracing(30004)
kubectl patch svc -n istio-system prometheus -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 9090, &quot;targetPort&quot;: 9090, &quot;nodePort&quot;: 30001}]}}'
kubectl patch svc -n istio-system grafana -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 3000, &quot;targetPort&quot;: 3000, &quot;nodePort&quot;: 30002}]}}'
kubectl patch svc -n istio-system kiali -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 20001, &quot;targetPort&quot;: 20001, &quot;nodePort&quot;: 30003}]}}'
kubectl patch svc -n istio-system tracing -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 16686, &quot;nodePort&quot;: 30004}]}}'

# Prometheus 접속 : envoy, istio 메트릭 확인
open http://127.0.0.1:30001

# Grafana 접속
open http://127.0.0.1:30002

# Kiali 접속 1 : NodePort
open http://127.0.0.1:30003

# (옵션) Kiali 접속 2 : Port forward
kubectl port-forward deployment/kiali -n istio-system 20001:20001 &amp;amp;
open http://127.0.0.1:20001

# tracing 접속 : 예거 트레이싱 대시보드
open http://127.0.0.1:30004


# 내부 접속 테스트용 netshoot 파드 생성
cat &amp;lt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c2380808eebc73e2d05654e&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;block-1deb8b2c1c23802282dbe81a7c129652&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5.1 Reducing the risk of deploying new code&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;block-1deb8b2c1c2380aba43fc9f0898314b3&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;5.1.1. 들어가며&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1deb8b2c1c238064856ad211d0b6f725&quot;&gt;1장에서는 ACME 회사의 시나리오를 소개했습니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c23802aaf82e66d784f2dfe&quot;&gt;클라우드 플랫폼으로 전환하여 회사의 코드 배포 위험을 줄이는 데 도움이 되는 관행을 채택했습니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c23809ea0dbc9773847b92e&quot;&gt;ACME가 시도한 패턴 중 하나는 애플리케이션에 변경 사항을 도입하기 위한 &lt;b&gt;blue / green deployments&lt;/b&gt;였습니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238092885fe2e7446e0520&quot;&gt;파란색/녹색 배포를 통해 ACME는 변경하고자 하는 서비스의 v2(녹색)를 가져와 v1(파란색) 옆에 프로덕션에 배포했습니다(그림 5.1 참조).&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380bc8384efa53a9da4cd&quot;&gt;ACME는 고객에게 출시하고자 할 때 트래픽을 v2(녹색)로 줄였습니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380bfa7bafe14ebca5c4d&quot;&gt;이 접근 방식은 문제가 발생하면 ACME가 서비스의 v1(파란색)으로 축소될 수 있기 때문에 배포 중 중단을 줄이는 데 도움이 되었습니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380eea084e04ff07c6c43&quot;&gt;파란색/녹색 배포가 도움이 되지만, v1에서 v2로 전환할 때는 &lt;span style=&quot;color: #d34a45;&quot;&gt;&lt;b&gt;여전히 모든 코드 변경 사항을 한 번에 해제하는 &quot;빅뱅&quot;을 경험&lt;/b&gt;&lt;/span&gt;합니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c23803b9d47dd053f3d3851&quot;&gt;&lt;span style=&quot;color: #d34a45;&quot;&gt;&lt;b&gt;배포 위험을 더욱 줄일 수 있는 방법을 살펴보겠습니다.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c23801380bdcf0b71ddfb4b&quot;&gt;먼저, 배포와 릴리스가 무엇을 의미하는지 명확히 해야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1deb8b2c1c23805e8b68ff0678385453&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OdaZz/btsNBcrJzxl/iMvbGmYfxYtDA1ModCMeKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OdaZz/btsNBcrJzxl/iMvbGmYfxYtDA1ModCMeKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OdaZz/btsNBcrJzxl/iMvbGmYfxYtDA1ModCMeKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOdaZz%2FbtsNBcrJzxl%2FiMvbGmYfxYtDA1ModCMeKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;401.97443&quot; height=&quot;411.9738&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c23808a8d09e688b12da65e&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;5.1.2. 배포 Deployment vs. 릴리스 release&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1deb8b2c1c2380ca9c2bcaf8e181c2f1&quot;&gt;가상의 카탈로그 서비스를 사용하여 &lt;b&gt;배포와 릴리스의 차이점&lt;/b&gt;을 설명해 보겠습니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238004b77fdfc8a93e6c3b&quot;&gt;&lt;b&gt;catalog 서비스의 v1이 현재 운영 중&lt;/b&gt;이라고 &lt;b&gt;가정&lt;/b&gt;해 보겠습니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380008c14d7f5857efb52&quot;&gt;catalog 서비스에 코드 변경 사항을 도입하려면, CI시스템으로 빌드하고, 새 버전(v1.1이라고 하자)으로 태그하고, 이를 스테이징 환경에 배포하고 테스트할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380829002db124148b311&quot;&gt;이 변화를 스테이징에서 검증하고 필요한 승인을 받으면 새 버전 v1.1을 운영 환경으로 가져올 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380788f6dc0ceda9ecb28&quot;&gt;&lt;b&gt;운영 환경에 배포할 때는 새 코드를 운영 환경 리소스(서버, 컨테이너 등)에 설치하지만, 트래픽은 보내지는 않는다.&lt;/b&gt;&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380d8a912fb7303ef67e8&quot;&gt;운영 환경에 배포하는 행위는 운영 환경에서 실행 중인 사용자에게 영향을 미치면 안 된다. (아직 어떤 사용자 요청도 받지 않기 때문이다.)&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380859366e9ca947c3450&quot;&gt;이 시점에서는 운영 환경에서 실행 중인 새 배포에 테스트를 실행해 기대대로 작동하는지 검증할 수 있다. (그림 5.2 참조).&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380aea395c310f2bf4e5a&quot;&gt;메트릭과 로그 수집을 활성화했을 것이므로, 이 신호들을 보고 새 배포가 기대한대로 행동하다고 확신할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238035bc83f73a3e3453d5&quot;&gt;일단 운영 환경에 코드를 배포하면, 사용자들에게 어떻게 릴리즈할지와 관련해 비즈니스 의사결정을 내릴 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380bbad16d15dfb73d9b0&quot;&gt;&lt;b&gt;코드를 릴리즈한다는 말은 실제 트래픽을 새 배포로 가져오는 것을 의미&lt;/b&gt;한다. 단, 릴리스가 꼭 한 번에 전부 가야 하는 것은 아니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380dabd52c02ea65e59df&quot;&gt;새로운 코드를 운영 환경에 도입하는 위험성을 줄이려면 &lt;b&gt;배포와 릴리스를 분리하는 것이 중요&lt;/b&gt;하다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380968166cbcd4c7528fc&quot;&gt;새로운 소프트웨어는 내부 직원에게만 먼저 공개하도록 결정할 수도 있다. (그림 5.3 참조).&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380ec8aeefcb6c13152df&quot;&gt;내부 직원들은 트래픽을 제어해 신 버전을 사용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380a8b1ffd0da6f88403c&quot;&gt;내부 직원은 소프트웨어의 운영자로서 로그와 메트릭 수집을 활용해 코드 변경 효과가 의도대로인지 관찰하고 검증할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1deb8b2c1c23809ca0f5eb50eb8e3e62&quot;&gt;이제 &lt;b&gt;실 트래픽의 대부분은 소프트웨어의 구 버전이 받고, 신 버전은 일부만을 받고&lt;/b&gt; 있다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380a6bcf3f95b414210a6&quot;&gt;이 방식을 &amp;lsquo;&lt;b&gt;카나리한다&lt;/b&gt; &lt;span style=&quot;color: #787673;&quot;&gt;canarying&lt;/span&gt;&amp;rsquo; 고 말하거나 &amp;lsquo;&lt;b&gt;카나리 릴리스&lt;/b&gt; &lt;span style=&quot;color: #787673;&quot;&gt;canary release&lt;/span&gt;&amp;rsquo;라고 부른다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238075aa4dd7838edd5c3c&quot;&gt;기본적으로는 신 버전을 노출할 소수의 사용자 그룹을 선택하고 신 버전이 어떻게 작동하는지 지켜본다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380af83f5cb7ab3018b60&quot;&gt;신 버전이 의도치 않게 동작하면 릴리스를 철회하고 트래픽을 이전 버전으로 되돌릴 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380fda819d57ecba12585&quot;&gt;코드 변경의 동작과 성능이 괜찮으면 릴리스의 범위를 더 넓힐 수 있다. (그림 5.4 참조).&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380d4a5a4d6b657b2ba51&quot;&gt;이제 무과금 고객이나 실버 등급 고객(즉, 골드나 플래티넘 대비 우선순위가 낮은 고객)에게 릴리스를 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238077a76cfa695044ef22&quot;&gt;새 코드를 모든 고객에게 노출할 때까지는 이렇게 릴리스하고 관찰하는 접근법을 계속 반복한다. (그림 5.5 참조).&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380d9ac01ff06551a5243&quot;&gt;이 과정 중 어느 시점에서라도 실제 사용자 상호작용 중에 새 코드가 예상하고 검증했던 기능이나 동작, 성능을 전달하지 않고 있다는 것을 발견할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c23802e9963c6251436b822&quot;&gt;이 경우 &lt;b&gt;트래픽을 이전 버전으로 돌려 릴리스를 롤백&lt;/b&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380479d9dc83cbe1e41b4&quot;&gt;과거에 ACME는 배포와 릴리스라는 두 가지 개념을 결합했습니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380d3a7e8ee68263c8a76&quot;&gt;코드 변경을 운영 환경으로 가져오고자, 이 회사는 서비스 구 버전을 신 버전으로 효과적으로 교체하는 &lt;b&gt;롤링 업그레이드&lt;/b&gt;를 시작했다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238094b291f8f517291d53&quot;&gt;&lt;b&gt;신 버전&lt;/b&gt;은 클러스터에 도입되자마자&lt;b&gt; 운영 환경 트래픽을 받았다.&lt;/b&gt;&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c23804daaf9c790ea91c042&quot;&gt;이 방식은 코드 신 버전뿐 아니라 신 버전에 수반되는 버그나 이슈에도 사용자들을 노출했다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380ab9ee4ea6324402b25&quot;&gt;배포와 릴리스를 분리하면 새 변화를 어떤 사용자들에게, 어떻게 내보일지 정밀하게 제어할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380fe8694c0c157bae7a4&quot;&gt;이를 통해 새 코드를 운영 환경에 가져오는 위험성을 줄일 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238055a630e8652fb8518a&quot;&gt;이스티오가 시스템에 들어오는 요청을 기반으로 트래픽을 제어함으로써 릴리스 위험성을 낮추는 데 어떻게 도움이 되는지 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c2380e8b4b0f1e165ba175f&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5.2 Routing requests with Istio&lt;/b&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt; (실습)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;block-1deb8b2c1c2380738655d222f5af15f6&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;5.2.1. 들어가며 : &lt;b&gt;VirtualService&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1deb8b2c1c2380fea2b2d820e16ce441&quot;&gt;2장에서는 Istio를 사용하여 카탈로그 서비스로의 트래픽을 제어했습니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c23803eadafd017b099193b&quot;&gt;Istio &lt;b&gt;VirtualService&lt;/b&gt; 리소스를 사용하여 트래픽을 라우팅하는 방법을 지정했습니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238038a2afd40fb2b6b324&quot;&gt;&lt;b&gt;어떻게 작동하는지 자세히 살펴보겠습니&lt;/b&gt;다. 요청의 내용에 따라 헤더를 평가하여 요청의 경로를 제어합니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380c4bf7ff4efd3a7ad83&quot;&gt;이러한 방식으로 다크 런치라는 기술을 사용하여 특정 사용자에게 배포를 제공할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380cca1a9c0413968d6d2&quot;&gt;어두운 실행에서는 많은 사용자가 알려진 작동 중인 서비스 버전으로 보내지며, 특정 클래스의 사용자는 최신 버전으로 보내집니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238014a68fd5c4a607e543&quot;&gt;따라서 우리는 다른 모든 사람에게 영향을 미치지 않고 특정 그룹에 통제된 방식으로 새로운 기능을 노출할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238091a2edea9a2a39c4cb&quot;&gt;Cleaning up our workspace&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c2380d9accdfec025d83384&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;5.2.2 Deploying v1 of the catalog service&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div id=&quot;block-1deb8b2c1c2380c2868bc99269522718&quot;&gt;Copy
&lt;pre class=&quot;dts&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;# Let&amp;rsquo;s deploy v1 of our catalog service. From the root of the book&amp;rsquo;s source code, run the following command
kubectl apply -f services/catalog/kubernetes/catalog.yaml -n istioinaction

# 확인
kubectl get pod -n istioinaction -owide
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE                  NOMINATED NODE   READINESS GATES
catalog-6cf4b97d-ftl77   2/2     Running   0          42s   10.10.0.14   myk8s-control-plane              

# 도메인 질의를 위한 임시 설정 : 실습 완료 후에는 삭제 해둘 것
echo &quot;127.0.0.1       catalog.istioinaction.io&quot; | sudo tee -a /etc/hosts
cat /etc/hosts | tail -n 3

# netshoot로 내부에서 catalog 접속 확인
kubectl exec -it netshoot -- curl -s http://catalog.istioinaction/items | jq
[
  {
    &quot;id&quot;: 1,
    &quot;color&quot;: &quot;amber&quot;,
    &quot;department&quot;: &quot;Eyewear&quot;,
    &quot;name&quot;: &quot;Elinor Glasses&quot;,
    &quot;price&quot;: &quot;282.00&quot;
  },
  {
    &quot;id&quot;: 2,
    &quot;color&quot;: &quot;cyan&quot;,
    &quot;department&quot;: &quot;Clothing&quot;,
    &quot;name&quot;: &quot;Atlas Shirt&quot;,
    &quot;price&quot;: &quot;127.00&quot;
  },
  {
    &quot;id&quot;: 3,
    &quot;color&quot;: &quot;teal&quot;,
    &quot;department&quot;: &quot;Clothing&quot;,
    &quot;name&quot;: &quot;Small Metal Shoes&quot;,
    &quot;price&quot;: &quot;232.00&quot;
  },
  {
    &quot;id&quot;: 4,
    &quot;color&quot;: &quot;red&quot;,
    &quot;department&quot;: &quot;Watches&quot;,
    &quot;name&quot;: &quot;Red Dragon Watch&quot;,
    &quot;price&quot;: &quot;232.00&quot;
  }
]

# 외부 노출을 위해 Gateway 설정
cat ch5/catalog-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: catalog-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - &quot;catalog.istioinaction.io&quot;
    
kubectl apply -f ch5/catalog-gateway.yaml -n istioinaction

# 트래픽을 catalog 서비스로 라우팅하는 VirtualService 리소스 설정
cat ch5/catalog-vs.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: catalog-vs-from-gw
spec:
  hosts:
  - &quot;catalog.istioinaction.io&quot;
  gateways:
  - catalog-gateway
  http:
  - route:
    - destination:
        host: catalog

kubectl apply -f ch5/catalog-vs.yaml -n istioinaction

# 확인
kubectl get gw,vs -n istioinaction

NAME                                          AGE
gateway.networking.istio.io/catalog-gateway   14s

NAME                                                    GATEWAYS              HOSTS                          AGE
virtualservice.networking.istio.io/catalog-vs-from-gw   [&quot;catalog-gateway&quot;]   [&quot;catalog.istioinaction.io&quot;]   4s


# istio-ingressgateway Service(NodePort)에 포트 정보 확인
kubectl get svc -n istio-system istio-ingressgateway -o jsonpath=&quot;{.spec.ports}&quot; | jq
[
  {
    &quot;name&quot;: &quot;status-port&quot;,
    &quot;nodePort&quot;: 31674,
    &quot;port&quot;: 15021,
    &quot;protocol&quot;: &quot;TCP&quot;,
    &quot;targetPort&quot;: 15021
  },
  {
    &quot;name&quot;: &quot;http2&quot;,
    &quot;nodePort&quot;: 30000, # 순서1 nodePort service의 nodePort
    &quot;port&quot;: 80,        # cluster 내부 접근시
    &quot;protocol&quot;: &quot;TCP&quot;,
    &quot;targetPort&quot;: 8080 # 순서2 target istio-ingressgateway pod의 http용 port
  },
  {
    &quot;name&quot;: &quot;https&quot;,
    &quot;nodePort&quot;: 30005,
    &quot;port&quot;: 443,
    &quot;protocol&quot;: &quot;TCP&quot;,
    &quot;targetPort&quot;: 8443
  }
]

# 호스트에서 NodePort(Service)로 접속 확인
curl -v -H &quot;Host: catalog.istioinaction.io&quot; http://localhost:30000

...

kubectl stern -l app=catalog -n istioinaction

open http://localhost:30000
open http://catalog.istioinaction.io:30000
open http://catalog.istioinaction.io:30000/items


# 신규 터미널 : 반복 접속 실행 해두기
while true; do curl -s http://catalog.istioinaction.io:30000/items/ ; sleep 1; echo; done
while true; do curl -s http://catalog.istioinaction.io:30000/items/ -I | head -n 1 ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done
while true; do curl -s http://catalog.istioinaction.io:30000/items/ -I | head -n 1 ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 0.5; echo; done
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1deb8b2c1c238067a515f6491c56954b&quot;&gt;호스트 외부에서 호출 경로 : 아래 그림 맨 왼쪽(curl client)는 외부라고 생각하면 됨.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380d7990de6ed15d80d23&quot;&gt;상세 정보 확인&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238060ae08cb8369728a16&quot;&gt;특정 파드의 istio-proxy 에 Envoy 에 Admin 웹 접속&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c238071a9defdffe343e198&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;5.2.3 Deploying v2 of the catalog service&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1deb8b2c1c2380bda29ae2cb02db07ff&quot;&gt;istio 트래픽 제어 기능 동작을 알아보기 위해, catalog 서비스 v2 를 배포해보자. &lt;span style=&quot;color: #d34a45;&quot;&gt;&lt;b&gt;&amp;rArr; 버전1,2 호출 된다. v2 호출되지 않게 할 수 없을까?&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1deb8b2c1c238021b2b5f22a146873eb&quot;&gt;Copy
&lt;pre class=&quot;mel&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;# catalog 서비스 v2 를 배포 : v2에서는 imageUrl 필드가 추가
kubectl apply -f services/catalog/kubernetes/catalog-deployment-v2.yaml -n istioinaction

#
kubectl get deploy -n istioinaction --show-labels
NAME         READY   UP-TO-DATE   AVAILABLE   AGE   LABELS
catalog      1/1     1            1           30m   app=catalog,version=v1
catalog-v2   1/1     1            1           34s   app=catalog,version=v2

kubectl get pod -n istioinaction -o wide
NAME                          READY   STATUS    RESTARTS   AGE   IP           NODE                  NOMINATED NODE   READINESS GATES
catalog-6cf4b97d-xvwcj        2/2     Running   0          12m   10.10.0.12   myk8s-control-plane              
catalog-v2-6df885b555-npg6c   2/2     Running   0          7s    10.10.0.13   myk8s-control-plane              

# 같은 catalog service에 v1, v2가 같이 ep로 등록되어있고, vs는 해당 service를 바라보고 있기 때문에 v2도 RDS SYNCED 상태임
docker exec -it myk8s-control-plane istioctl proxy-status
NAME                                                  CLUSTER        CDS        LDS        EDS        RDS        ECDS         ISTIOD                      VERSION
catalog-6cf4b97d-xvwcj.istioinaction                  Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-7df6ffc78d-lf2hl     1.17.8
catalog-v2-6df885b555-npg6c.istioinaction             Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-7df6ffc78d-lf2hl     1.17.8
istio-ingressgateway-996bc6bb6-h4dkf.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-7df6ffc78d-lf2hl     1.17.8

# 호출 테스트 : v1 , v2 호출 확인
for i in {1..10}; do curl -s http://catalog.istioinaction.io:30000/items/ ; printf &quot;\n\n&quot;; done


# istio-ingressgateway proxy-config 확인
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system --fqdn catalog.istioinaction.svc.cluster.local
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system --fqdn catalog.istioinaction.svc.cluster.local -o json
...
        &quot;name&quot;: &quot;outbound|80||catalog.istioinaction.svc.cluster.local&quot;,
        &quot;type&quot;: &quot;EDS&quot;,
        &quot;edsClusterConfig&quot;: {
            &quot;edsConfig&quot;: {
                &quot;ads&quot;: {},
                &quot;initialFetchTimeout&quot;: &quot;0s&quot;,
                &quot;resourceApiVersion&quot;: &quot;V3&quot;
            },
            &quot;serviceName&quot;: &quot;outbound|80||catalog.istioinaction.svc.cluster.local&quot;
        },
        &quot;connectTimeout&quot;: &quot;10s&quot;,
        &quot;lbPolicy&quot;: &quot;LEAST_REQUEST&quot;, # default Envoy LB Policy
        &quot;circuitBreakers&quot;: {
            &quot;thresholds&quot;: [
                {
                    &quot;maxConnections&quot;: 4294967295,
                    &quot;maxPendingRequests&quot;: 4294967295,
                    &quot;maxRequests&quot;: 4294967295,
                    &quot;maxRetries&quot;: 4294967295,
                    &quot;trackRemaining&quot;: true
                }
            ]
        },
        &quot;commonLbConfig&quot;: {
            &quot;localityWeightedLbConfig&quot;: {}
        },
...

kubectl get po -n istioinaction -o wide
NAME                          READY   STATUS    RESTARTS   AGE    IP           NODE                  NOMINATED NODE   READINESS GATES
catalog-6cf4b97d-xvwcj        2/2     Running   0          16m    10.10.0.12   myk8s-control-plane              
catalog-v2-6df885b555-npg6c   2/2     Running   0          4m8s   10.10.0.13   myk8s-control-plane              

docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80||catalog.istioinaction.svc.cluster.local'
ENDPOINT            STATUS      OUTLIER CHECK     CLUSTER
10.10.0.12:3000     HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local # catalog pod
10.10.0.13:3000     HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local # catalog-v2 pod

docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80||catalog.istioinaction.svc.cluster.local' -o json
...
   {
        &quot;name&quot;: &quot;outbound|80||catalog.istioinaction.svc.cluster.local&quot;,
        &quot;addedViaApi&quot;: true,
        &quot;hostStatuses&quot;: [
            {
                &quot;address&quot;: {
                    &quot;socketAddress&quot;: {
                        &quot;address&quot;: &quot;10.10.0.12&quot;,
                        &quot;portValue&quot;: 3000
                    }
                },
                &quot;stats&quot;: [
                    {
                        &quot;name&quot;: &quot;cx_connect_fail&quot;
                    },
                    {
                        &quot;value&quot;: &quot;8&quot;,
                        &quot;name&quot;: &quot;cx_total&quot;
                    },
                    {
                        &quot;name&quot;: &quot;rq_error&quot;
                    },
                    {
                        &quot;value&quot;: &quot;315&quot;,
                        &quot;name&quot;: &quot;rq_success&quot;
                    },
                    {
                        &quot;name&quot;: &quot;rq_timeout&quot;
                    },
                    {
                        &quot;value&quot;: &quot;315&quot;,
                        &quot;name&quot;: &quot;rq_total&quot;
                    },
                    {
                        &quot;type&quot;: &quot;GAUGE&quot;,
                        &quot;value&quot;: &quot;8&quot;,
                        &quot;name&quot;: &quot;cx_active&quot;
                    },
                    {
                        &quot;type&quot;: &quot;GAUGE&quot;,
                        &quot;name&quot;: &quot;rq_active&quot;
                    }
                ],
                &quot;healthStatus&quot;: {
                    &quot;edsHealthStatus&quot;: &quot;HEALTHY&quot;
                },
                &quot;weight&quot;: 1,
                &quot;locality&quot;: {}
            },
            {
                &quot;address&quot;: {
                    &quot;socketAddress&quot;: {
                        &quot;address&quot;: &quot;10.10.0.13&quot;,
                        &quot;portValue&quot;: 3000
                    }
                },
                &quot;stats&quot;: [
                    {
                        &quot;name&quot;: &quot;cx_connect_fail&quot;
                    },
                    {
                        &quot;value&quot;: &quot;8&quot;,
                        &quot;name&quot;: &quot;cx_total&quot;
                    },
                    {
                        &quot;name&quot;: &quot;rq_error&quot;
                    },
                    {
                        &quot;value&quot;: &quot;308&quot;,
                        &quot;name&quot;: &quot;rq_success&quot;
                    },
                    {
                        &quot;name&quot;: &quot;rq_timeout&quot;
                    },
                    {
                        &quot;value&quot;: &quot;308&quot;,
                        &quot;name&quot;: &quot;rq_total&quot;
                    },
                    {
                        &quot;type&quot;: &quot;GAUGE&quot;,
                        &quot;value&quot;: &quot;8&quot;,
                        &quot;name&quot;: &quot;cx_active&quot;
                    },
                    {
                        &quot;type&quot;: &quot;GAUGE&quot;,
                        &quot;name&quot;: &quot;rq_active&quot;
                    }
                ],
                &quot;healthStatus&quot;: {
                    &quot;edsHealthStatus&quot;: &quot;HEALTHY&quot;
                },
                &quot;weight&quot;: 1,
                &quot;locality&quot;: {}
            }
        ],
        &quot;circuitBreakers&quot;: {
            &quot;thresholds&quot;: [
                {
                    &quot;maxConnections&quot;: 4294967295,
                    &quot;maxPendingRequests&quot;: 4294967295,
                    &quot;maxRequests&quot;: 4294967295,
                    &quot;maxRetries&quot;: 4294967295
                },
                {
                    &quot;priority&quot;: &quot;HIGH&quot;,
                    &quot;maxConnections&quot;: 1024,
                    &quot;maxPendingRequests&quot;: 1024,
                    &quot;maxRequests&quot;: 1024,
                    &quot;maxRetries&quot;: 3
                }
            ]
        },
        &quot;observabilityName&quot;: &quot;outbound|80||catalog.istioinaction.svc.cluster.local&quot;,
        &quot;edsServiceName&quot;: &quot;outbound|80||catalog.istioinaction.svc.cluster.local&quot;
    },
...

# catalog proxy-config 도 직접 확인해보자
# 같은 service에 두개의 pod가 등록되어있고 vs가 해당 service를 보고있으므로 두개의 envoy endpoint가 보인다.
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/catalog-v2.istioinaction --cluster 'outbound|80||catalog.istioinaction.svc.cluster.local'

ENDPOINT            STATUS      OUTLIER CHECK     CLUSTER
10.10.0.12:3000     HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local
10.10.0.13:3000     HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c2380beaa9bd62ab80f1fdc&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rTcPU/btsNz6F3o2k/uwb43zaYSicf9ZtEO8pkik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rTcPU/btsNz6F3o2k/uwb43zaYSicf9ZtEO8pkik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rTcPU/btsNz6F3o2k/uwb43zaYSicf9ZtEO8pkik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrTcPU%2FbtsNz6F3o2k%2Fuwb43zaYSicf9ZtEO8pkik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;816&quot; height=&quot;381.3988&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;552&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
Traffic Distribution, Traffic Animation 체크&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c23802e978ec789ed83873c&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;5.2.4 Routing all traffic to v1 of the catalog service&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div id=&quot;block-1deb8b2c1c2380489a31d857368d0a7a&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYSAH9/btsNBtttdDb/7fAuL5ZwdMQcu376lqUoBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYSAH9/btsNBtttdDb/7fAuL5ZwdMQcu376lqUoBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYSAH9/btsNBtttdDb/7fAuL5ZwdMQcu376lqUoBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYSAH9%2FbtsNBtttdDb%2F7fAuL5ZwdMQcu376lqUoBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;572.96875&quot; height=&quot;214.12274&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;253&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1deb8b2c1c2380ce958eec9761cf0c42&quot;&gt;모든 트래픽을 catalog v1 으로 라우팅. 이것이 다크런치를 시작하기 전의 일반적인 트래픽 패턴이다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380e0bbb6f2abec431db3&quot;&gt;어느 워크로드가 v1, v2 인지 이스티오에게 힌트를 줘야한다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380b7aec8f8a00bad3bc2&quot;&gt;&lt;b&gt;catalog v1&lt;/b&gt;은 deployment 리소스에서 레이블 app:catalog, version:v1 을 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c23803fa6b9f17efc0b9900&quot;&gt;&lt;b&gt;catalog v2&lt;/b&gt;은 deployment 리소스에서 레이블 app:catalog, version:v2 을 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380acadaaffa64a0d6901&quot;&gt;이스티오에게는 이렇게 다른 버전들의 &lt;b&gt;부분집합&lt;/b&gt; &lt;span style=&quot;color: #787673;&quot;&gt;subset&lt;/span&gt; 으로 지정하는 &lt;b&gt;DestinationRule&lt;/b&gt; 을 만들어준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1deb8b2c1c2380e7a60bf4daa2d19297&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/toeXI/btsNAf3SweY/FFk1sUu9qmi2cCnWYtgedk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/toeXI/btsNAf3SweY/FFk1sUu9qmi2cCnWYtgedk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/toeXI/btsNAf3SweY/FFk1sUu9qmi2cCnWYtgedk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtoeXI%2FbtsNAf3SweY%2FFFk1sUu9qmi2cCnWYtgedk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;346.1341&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c23802ca746d26de8fcd583&quot;&gt;Copy
&lt;pre class=&quot;mel&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;#
kubectl get pod -l app=catalog -n istioinaction --show-labels
 
NAME                          READY   STATUS    RESTARTS   AGE   LABELS
catalog-6cf4b97d-xvwcj        2/2     Running   0          23m   app=catalog, ... , version=v1
catalog-v2-6df885b555-npg6c   2/2     Running   0          10m   app=catalog, ... , version=v2

# pod의 version label을 destinationRule에 설정해줘 특정 cluster subset이 어떤 pod로 routing 될지 결정!
cat ch5/catalog-dest-rule.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: catalog
spec:
  host: catalog.istioinaction.svc.cluster.local
  subsets:
  - name: version-v1
    labels:
      version: v1
  - name: version-v2
    labels:
      version: v2

kubectl apply -f ch5/catalog-dest-rule.yaml -n istioinaction

# 확인
kubectl get destinationrule -n istioinaction
NAME      HOST                                      AGE
catalog   catalog.istioinaction.svc.cluster.local   8s


# catalog proxy-config 확인 : SUBSET(v1, v2, -) 확인
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system --fqdn catalog.istioinaction.svc.cluster.local
SERVICE FQDN                                PORT     SUBSET         DIRECTION     TYPE     DESTINATION RULE
catalog.istioinaction.svc.cluster.local     80       -              outbound      EDS      catalog.istioinaction
catalog.istioinaction.svc.cluster.local     80       version-v1     outbound      EDS      catalog.istioinaction
catalog.istioinaction.svc.cluster.local     80       version-v2     outbound      EDS      catalog.istioinaction

# cluster name에 port뒤에 subset name이 붙게된다.
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system --subset version-v1 -o json
...
        &quot;name&quot;: &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;,
        &quot;type&quot;: &quot;EDS&quot;,
        &quot;edsClusterConfig&quot;: {
            &quot;edsConfig&quot;: {
                &quot;ads&quot;: {},
                &quot;initialFetchTimeout&quot;: &quot;0s&quot;,
                &quot;resourceApiVersion&quot;: &quot;V3&quot;
            },
            &quot;serviceName&quot;: &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;
        },
        &quot;connectTimeout&quot;: &quot;10s&quot;,
        &quot;lbPolicy&quot;: &quot;LEAST_REQUEST&quot;,
...

# cluster name에 port뒤에 subset name이 붙게된다.
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system --subset version-v2 -o json
...
        &quot;name&quot;: &quot;outbound|80|version-v2|catalog.istioinaction.svc.cluster.local&quot;,
        &quot;type&quot;: &quot;EDS&quot;,
        &quot;edsClusterConfig&quot;: {
            &quot;edsConfig&quot;: {
                &quot;ads&quot;: {},
                &quot;initialFetchTimeout&quot;: &quot;0s&quot;,
                &quot;resourceApiVersion&quot;: &quot;V3&quot;
            },
            &quot;serviceName&quot;: &quot;outbound|80|version-v2|catalog.istioinaction.svc.cluster.local&quot;
        },
        &quot;connectTimeout&quot;: &quot;10s&quot;,
        &quot;lbPolicy&quot;: &quot;LEAST_REQUEST&quot;,
...

#
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system --fqdn catalog.istioinaction.svc.cluster.local -o json
...
        &quot;name&quot;: &quot;outbound|80||catalog.istioinaction.svc.cluster.local&quot;,
        &quot;type&quot;: &quot;EDS&quot;,
        &quot;edsClusterConfig&quot;: {
            &quot;edsConfig&quot;: {
                &quot;ads&quot;: {},
                &quot;initialFetchTimeout&quot;: &quot;0s&quot;,
                &quot;resourceApiVersion&quot;: &quot;V3&quot;
            },
            &quot;serviceName&quot;: &quot;outbound|80||catalog.istioinaction.svc.cluster.local&quot;
        },
...

# subset마다 각각의 endpoint가 생겼고, 기존의 통합된 endpoint도 존재
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system | egrep 'ENDPOINT|istioinaction'
ENDPOINT                                                STATUS      OUTLIER CHECK     CLUSTER
10.10.0.12:3000                                         HEALTHY     OK                outbound|80|version-v1|catalog.istioinaction.svc.cluster.local
10.10.0.12:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local
10.10.0.13:3000                                         HEALTHY     OK                outbound|80|version-v2|catalog.istioinaction.svc.cluster.local
10.10.0.13:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local

docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80|version-v1|catalog.istioinaction.svc.cluster.local'
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80|version-v1|catalog.istioinaction.svc.cluster.local' -o json
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80|version-v2|catalog.istioinaction.svc.cluster.local'
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80|version-v2|catalog.istioinaction.svc.cluster.local' -o json

docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80||catalog.istioinaction.svc.cluster.local'
ENDPOINT            STATUS      OUTLIER CHECK     CLUSTER
10.10.0.12:3000     HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local
10.10.0.13:3000     HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local



# VirtualService 수정 (subset 추가)
# 해당 route 설정을 통해서 catalog라는 cluster로 route되는데, subset으로 version-v1을 설정해준다.
# 이를 통해서 이제 catalog service에 mapping된 pod중 v1 pod로만 traffic이 routing 된다.
cat ch5/catalog-vs-v1.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: catalog-vs-from-gw
spec:
  hosts:
  - &quot;catalog.istioinaction.io&quot;
  gateways:
  - catalog-gateway
  http:
  - route:
    - destination:
        host: catalog
        subset: version-v1

kubectl apply -f ch5/catalog-vs-v1.yaml -n istioinaction

# 호출 테스트 : v1
for i in {1..10}; do curl -s http://catalog.istioinaction.io:30000/items/ ; printf &quot;\n\n&quot;; done


# 세부 정보 확인
# routes 에 virtualHosts 항목에 routes.route 에 cluster 부분이 ...version-v1... 설정 확인
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/istio-ingressgateway.istio-system

# 이제 routes 정보를 보면, istio-ingressgateway pod의 http.8080에 대해서 version-v1에 대한 route 정보만 출력된다.
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/istio-ingressgateway.istio-system --name http.8080 -o json
...
        &quot;virtualHosts&quot;: [
            {
                &quot;name&quot;: &quot;catalog.istioinaction.io:80&quot;,
                &quot;domains&quot;: [
                    &quot;catalog.istioinaction.io&quot;
                ],
                &quot;routes&quot;: [
                    {
                        &quot;match&quot;: {
                            &quot;prefix&quot;: &quot;/&quot;
                        },
                        &quot;route&quot;: {
                            &quot;cluster&quot;: &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;,
                            &quot;timeout&quot;: &quot;0s&quot;,
                            &quot;retryPolicy&quot;: {
                                &quot;retryOn&quot;: &quot;connect-failure,refused-stream,unavailable,cancelled,retriable-status-codes&quot;,
                                &quot;numRetries&quot;: 2,
...

# cluster 
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system --fqdn catalog.istioinaction.svc.cluster.local
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system --subset version-v1
SERVICE FQDN                                PORT     SUBSET         DIRECTION     TYPE     DESTINATION RULE
catalog.istioinaction.svc.cluster.local     80       version-v1     outbound      EDS      catalog.istioinaction

docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system --subset version-v1 -o json
...
        &quot;name&quot;: &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;,
        &quot;type&quot;: &quot;EDS&quot;,
        &quot;edsClusterConfig&quot;: {
            &quot;edsConfig&quot;: {
                &quot;ads&quot;: {},
                &quot;initialFetchTimeout&quot;: &quot;0s&quot;,
                &quot;resourceApiVersion&quot;: &quot;V3&quot;
            },
            &quot;serviceName&quot;: &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;
        },
        ...
        &quot;metadata&quot;: {
            &quot;filterMetadata&quot;: {
                &quot;istio&quot;: {
                    &quot;config&quot;: &quot;/apis/networking.istio.io/v1alpha3/namespaces/istioinaction/destination-rule/catalog&quot;,
                    &quot;default_original_port&quot;: 80,
                    &quot;services&quot;: [
                        {
                            &quot;host&quot;: &quot;catalog.istioinaction.svc.cluster.local&quot;,
                            &quot;name&quot;: &quot;catalog&quot;,
                            &quot;namespace&quot;: &quot;istioinaction&quot;
                        }
                    ],
                    &quot;subset&quot;: &quot;version-v1&quot;
...

# endpoint 
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system | egrep 'ENDPOINT|istioinaction'

docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80|version-v1|catalog.istioinaction.svc.cluster.local'
ENDPOINT            STATUS      OUTLIER CHECK     CLUSTER
10.10.0.12:3000     HEALTHY     OK                outbound|80|version-v1|catalog.istioinaction.svc.cluster.local

docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80|version-v1|catalog.istioinaction.svc.cluster.local' -o json
...

# istio-proxy (catalog)
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/catalog.istioinaction --subset version-v1 -o json
...
        &quot;metadata&quot;: {
            &quot;filterMetadata&quot;: {
                &quot;istio&quot;: {
                    &quot;config&quot;: &quot;/apis/networking.istio.io/v1alpha3/namespaces/istioinaction/destination-rule/catalog&quot;,
                    &quot;default_original_port&quot;: 80,
                    &quot;services&quot;: [
                        {
                            &quot;host&quot;: &quot;catalog.istioinaction.svc.cluster.local&quot;,
                            &quot;name&quot;: &quot;catalog&quot;,
                            &quot;namespace&quot;: &quot;istioinaction&quot;
                        }
                    ],
                    &quot;subset&quot;: &quot;version-v1&quot;
                }
            }
        },
...
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c238079a0e0d2151d18d075&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAkwpB/btsNAdrFGVr/By90U5WBm6y2KylonB9ioK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAkwpB/btsNAdrFGVr/By90U5WBm6y2KylonB9ioK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAkwpB/btsNAdrFGVr/By90U5WBm6y2KylonB9ioK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAkwpB%2FbtsNAdrFGVr%2FBy90U5WBm6y2KylonB9ioK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;768&quot; height=&quot;203.35774&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;282&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1deb8b2c1c23804894b1cb30e348c98b&quot;&gt;이 시점에서 모든 트래픽이 v1 라우팅 된다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380ed9fa8fc54993e4cb2&quot;&gt;이제 &lt;b&gt;특정 요청들을 통제된 방식으로 v2 라우팅&lt;/b&gt;하고 싶다. 다음 절에서 알아보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c23808a9f3cce3807b3ed81&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;5.2.5 Routing specific requests to v2&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div id=&quot;block-1deb8b2c1c2380fe91a7ff09e52b5733&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MoFxd/btsNBBkrGkZ/TxvOKSepBG2ufRZtWasUR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MoFxd/btsNBBkrGkZ/TxvOKSepBG2ufRZtWasUR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MoFxd/btsNBBkrGkZ/TxvOKSepBG2ufRZtWasUR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMoFxd%2FbtsNBBkrGkZ%2FTxvOKSepBG2ufRZtWasUR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;269.23514&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
특정 콘텐츠가 담긴 요청 라우팅&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1deb8b2c1c23808ca1fbc20dd7a6d206&quot;&gt;HTTP 요청 헤더 x-istio-cohort: internal 을 포함한 트래픽(&lt;span style=&quot;color: #787673;&quot;&gt;통제된 방식&lt;/span&gt;)은 catalog v2로 보내고 싶다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1deb8b2c1c2380a9babbd2b5ca9d88e1&quot;&gt;Copy
&lt;pre class=&quot;perl&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;#
cat ch5/catalog-vs-v2-request.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: catalog-vs-from-gw
spec:
  hosts:
  - &quot;catalog.istioinaction.io&quot;
  gateways:
  - catalog-gateway
  http:
  # match[].headers[]에 특정 http header값을 주어 match될 경우 routing을 하도록 한다.
  - match:
    - headers:
        x-istio-cohort:
          exact: &quot;internal&quot;
    route:
    - destination:
        host: catalog
        subset: version-v2
  - route:
    - destination:
        host: catalog
        subset: version-v1

kubectl apply -f ch5/catalog-vs-v2-request.yaml -n istioinaction

# 호출 테스트 : 여전히 v1 -&amp;gt; header가 없기때문에!!
for i in {1..10}; do curl -s http://catalog.istioinaction.io:30000/items/ ; printf &quot;\n\n&quot;; done

# 요청 헤더 포함 호출 테스트 : v2!
curl http://catalog.istioinaction.io:30000/items -H &quot;x-istio-cohort: internal&quot;
[
  {
    &quot;id&quot;: 1,
    &quot;color&quot;: &quot;amber&quot;,
    &quot;department&quot;: &quot;Eyewear&quot;,
    &quot;name&quot;: &quot;Elinor Glasses&quot;,
    &quot;price&quot;: &quot;282.00&quot;,
    &quot;imageUrl&quot;: &quot;http://lorempixel.com/640/480&quot;
  },
...
]

# (옵션) 신규 터미널 : v2 반복 접속
while true; do curl -s http://catalog.istioinaction.io:30000/items/ -H &quot;x-istio-cohort: internal&quot; -I | head -n 1 ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 2; echo; done


# 상세 확인
# route 추가 : routes 에 2개의 route 확인 - 위에서 부터 적용되는 순서 중요!
# envoy(istio)는 따로 우선순위에 대한 설정이 없고 위에 정의된 route rule부터 확인한다.
# 그러므로, specific한 route rule부터 상단에 두고 가장 general한 default rule같은것들은 최하단에 두는것이 좋다!!
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/istio-ingressgateway.istio-system --name http.8080
NAME          DOMAINS                      MATCH     VIRTUAL SERVICE
http.8080     catalog.istioinaction.io     /*        catalog-vs-from-gw.istioinaction
http.8080     catalog.istioinaction.io     /*        catalog-vs-from-gw.istioinaction

docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/istio-ingressgateway.istio-system --name http.8080 -o json
...
        &quot;virtualHosts&quot;: [
            {
                &quot;name&quot;: &quot;catalog.istioinaction.io:80&quot;,
                &quot;domains&quot;: [
                    &quot;catalog.istioinaction.io&quot;
                ],
                &quot;routes&quot;: [
                    {
                        &quot;match&quot;: {
                            &quot;prefix&quot;: &quot;/&quot;,
                            &quot;caseSensitive&quot;: true,
                            &quot;headers&quot;: [
                                {
                                    &quot;name&quot;: &quot;x-istio-cohort&quot;,
                                    &quot;stringMatch&quot;: {
                                        &quot;exact&quot;: &quot;internal&quot;
                                    }
                                }
                            ]
                        },
                        &quot;route&quot;: {
                            &quot;cluster&quot;: &quot;outbound|80|version-v2|catalog.istioinaction.svc.cluster.local&quot;,
                            &quot;timeout&quot;: &quot;0s&quot;,
                ...
                   {
                        &quot;match&quot;: {
                            &quot;prefix&quot;: &quot;/&quot;
                        },
                        &quot;route&quot;: {
                            &quot;cluster&quot;: &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;,
...

#
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system --fqdn catalog.istioinaction.svc.cluster.local
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system | egrep 'ENDPOINT|istioinaction'

# istio-proxy (catalog)에는 routes 정보가 아래 cluster 로 보내는 1개만 있다. 즉 istio-proxy(istio-ingressgateway)가 routes 분기 처리하는 것을 알 수 있다.
## &quot;cluster&quot;: &quot;outbound|80||catalog.istioinaction.svc.cluster.local&quot;
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/catalog.istioinaction --name 80 -o json
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/catalog.istioinaction | grep catalog
80                                                            catalog, catalog.istioinaction + 1 more...          /*

# deploy/catalog-v2.istioinaction에 대한 istio-proxy에도 역시 routes 정보가 하나
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/catalog-v2.istioinaction | grep catalog   
80                                                            catalog, catalog.istioinaction + 1 more...          /* &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c2380a09f2fc905075f15cf&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csczES/btsNCAE7Whg/MJr8oyHoTD2VoBYuP0ise1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csczES/btsNCAE7Whg/MJr8oyHoTD2VoBYuP0ise1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csczES/btsNCAE7Whg/MJr8oyHoTD2VoBYuP0ise1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsczES%2FbtsNCAE7Whg%2FMJr8oyHoTD2VoBYuP0ise1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;912&quot; height=&quot;401.0269&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;507&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c2380fe92accd73f06b5c71&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;5.2.6 Routing deep within a call graph&lt;/b&gt; 호출 그래프 내 깊은 위치에서 라우팅 &lt;b&gt;&lt;u&gt;Mesh(Gateway)&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div id=&quot;block-1deb8b2c1c2380c7afabf1e285dd102e&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;287&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnsVKo/btsNBwwGvtS/ZVKR4UtYLLjzRcG0Lai2y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnsVKo/btsNBwwGvtS/ZVKR4UtYLLjzRcG0Lai2y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnsVKo/btsNBwwGvtS/ZVKR4UtYLLjzRcG0Lai2y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnsVKo%2FbtsNBwwGvtS%2FZVKR4UtYLLjzRcG0Lai2y1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;816&quot; height=&quot;308.55334&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;287&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
호출 그래프 내 깊은 위치에서 수행하는 특정 콘텐츠가 담긴 요청 라우팅&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1deb8b2c1c23805b8dc6ebf25e35dc69&quot;&gt;지금까지 이스티오를 사용해 요청을 라우팅하는 방법을 살펴봤지만, 라우팅 수행 위치가 에지/게이트웨이뿐이었다.&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c238076b4ffcdf3b8a1dfdb&quot;&gt;이런 트래픽 규칙은 호출 그래프 내 깊은 곳에서도 적용할 수 있습니다. (그림 5.9 참조).&lt;/li&gt;
&lt;li id=&quot;block-1deb8b2c1c2380d6bee1cabcaf1befc0&quot;&gt;2장에서 이 작업을 수행했으므로, 프로세스를 다시 만들고 기대대로 동작하는지 확인해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1deb8b2c1c23805e8e28d005422c2891&quot;&gt;Copy
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;# 초기화
kubectl delete gateway,virtualservice,destinationrule --all -n istioinaction

# webapp 기동
kubectl apply -n istioinaction -f services/webapp/kubernetes/webapp.yaml
kubectl apply -f services/catalog/kubernetes/catalog.yaml -n istioinaction # 이미 배포 상태
kubectl apply -f services/catalog/kubernetes/catalog-deployment-v2.yaml -n istioinaction # 이미 배포 상태

# 확인
kubectl get deploy,pod,svc,ep -n istioinaction
NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/catalog      1/1     1            1           50m
deployment.apps/catalog-v2   1/1     1            1           38m
deployment.apps/webapp       0/1     1            0           4s

NAME                              READY   STATUS            RESTARTS   AGE
pod/catalog-6cf4b97d-xvwcj        2/2     Running           0          50m
pod/catalog-v2-6df885b555-npg6c   2/2     Running           0          38m
pod/webapp-7685bcb84-42zqn        0/2     PodInitializing   0          4s

NAME              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/catalog   ClusterIP   10.200.1.5     &amp;lt;none&amp;gt;        80/TCP    50m
service/webapp    ClusterIP   10.200.1.111   &amp;lt;none&amp;gt;        80/TCP    4s

NAME                ENDPOINTS                         AGE
endpoints/catalog   10.10.0.12:3000,10.10.0.13:3000   50m
endpoints/webapp                                      4s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1deb8b2c1c23803fbb3bd7736bcf6b7b&quot;&gt;GW, VS 설정 후 호출 테스트 : webapp &amp;rarr; catalog 는 k8s service(clusterIP) 라우팅 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1deb8b2c1c238015a2c6d2b579297f1f&quot;&gt;Copy
&lt;pre class=&quot;yaml&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;# Now, set up the Istio ingress gateway to route to the webapp service
cat services/webapp/istio/webapp-catalog-gw-vs.yaml
---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: coolstore-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - &quot;webapp.istioinaction.io&quot;
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: webapp-virtualservice
spec:
  hosts:
  - &quot;webapp.istioinaction.io&quot;
  gateways:
  - coolstore-gateway
  http:
  - route:
    - destination:
        host: webapp
        port:
          number: 80

kubectl apply -f services/webapp/istio/webapp-catalog-gw-vs.yaml -n istioinaction

# 확인
kubectl get gw,vs -n istioinaction
NAME                                            AGE
gateway.networking.istio.io/coolstore-gateway   3s

NAME                                                       GATEWAYS                HOSTS                         AGE
virtualservice.networking.istio.io/webapp-virtualservice   [&quot;coolstore-gateway&quot;]   [&quot;webapp.istioinaction.io&quot;]   3s


# 도메인 질의를 위한 임시 설정 : 실습 완료 후에는 삭제 해둘 것
echo &quot;127.0.0.1       webapp.istioinaction.io&quot; | sudo tee -a /etc/hosts
cat /etc/hosts | tail -n 3


# 호출테스트 : 외부(web, curl) &amp;rarr; ingressgw &amp;rarr; webapp &amp;rarr; catalog (v1, v2)
curl -s http://webapp.istioinaction.io:30000/api/catalog | jq

# 반복 호출테스트 : 신규터미널 2개에 아래 각각 실행 해두기
while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog -I | head -n 1 ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done
while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog -H &quot;x-istio-cohort: internal&quot; -I | head -n 1 ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 2; echo; done


# proxy-config : istio-ingressgateway
# istio-ingressgateway의 http.8080은 이제 webapp.istioinaction.svc.cluster.local cluster로 routing 된다.
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/istio-ingressgateway.istio-system --name http.8080 
NAME          DOMAINS                     MATCH     VIRTUAL SERVICE
http.8080     webapp.istioinaction.io     /*        webapp-virtualservice.istioinaction
=&amp;gt; route.&quot;cluster&quot;: &quot;outbound|80||webapp.istioinaction.svc.cluster.local&quot;

docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system | egrep 'webapp|catalog'
catalog.istioinaction.svc.cluster.local                 80        -          outbound      EDS            
webapp.istioinaction.svc.cluster.local                  80        -          outbound      EDS

docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system --fqdn webapp.istioinaction.svc.cluster.local -o json
...
        &quot;name&quot;: &quot;outbound|80||webapp.istioinaction.svc.cluster.local&quot;,
        &quot;type&quot;: &quot;EDS&quot;,
...

# outbound|80||webapp.istioinaction.svc.cluster.local cluster에 대한 endpoint는 webapp pod이다.
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system --cluster 'outbound|80||webapp.istioinaction.svc.cluster.local'
ENDPOINT            STATUS      OUTLIER CHECK     CLUSTER
10.10.0.14:8080     HEALTHY     OK                outbound|80||webapp.istioinaction.svc.cluster.local

kubectl get po -n istioinaction -o wide
NAME                          READY   STATUS    RESTARTS   AGE    IP           NODE                  NOMINATED NODE   READINESS GATES
catalog-6cf4b97d-xvwcj        2/2     Running   0          56m    10.10.0.12   myk8s-control-plane              
catalog-v2-6df885b555-npg6c   2/2     Running   0          44m    10.10.0.13   myk8s-control-plane              
webapp-7685bcb84-42zqn        2/2     Running   0          6m7s   10.10.0.14   myk8s-control-plane              

# proxy-config : webapp
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/webapp.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/webapp.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/webapp.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/webapp.istioinaction

# proxy-config : catalog
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/catalog.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/catalog.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/catalog.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/catalog.istioinaction


# webapp istio-proxy 로그 활성화
# 신규 터미널
kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f

# webapp istio-proxy 로그 활성화 적용
cat &amp;lt;&amp;lt; EOF | kubectl apply -f -
apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
  name: webapp
  namespace: istioinaction
spec:
  selector:
    matchLabels:
      app: webapp
  accessLogging:
  - providers:
    - name: envoy #2 액세스 로그를 위한 프로바이더 설정
    disabled: false #3 disable 를 false 로 설정해 활성화한다
EOF

# webapp &amp;rarr; catalog 는 k8s service(clusterIP) 라우팅 사용 확인!
kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f
[2025-04-23T15:34:10.224Z] &quot;HEAD /api/catalog HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 0 4 3 &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;aa7d83a7-60ac-41aa-b4ca-71d7572cb9b0&quot; &quot;webapp.istioinaction.io:30000&quot; &quot;10.10.0.14:8080&quot; inbound|8080|| 127.0.0.6:52231 10.10.0.14:8080 192.168.65.1:0 outbound_.80_._.webapp.istioinaction.svc.cluster.local default
=&amp;gt; 이 로그는 webapp 서비스의 사이드카 프록시가 클라이언트로부터 직접 HTTP 요청을 받은 장면이고, 이 요청을 10.10.0.14:8080 (즉, webapp 서비스의 실제 컨테이너)으로 보냄을 의미

[2025-04-23T15:34:11.234Z] &quot;GET /items HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 698 3 3 &quot;192.168.65.1&quot; &quot;beegoServer&quot; &quot;7d9f5110-da1c-421f-b0eb-bca0d5b273c4&quot; &quot;catalog.istioinaction:80&quot; &quot;10.10.0.13:3000&quot; outbound|80||catalog.istioinaction.svc.cluster.local 10.10.0.14:33550(src) 10.200.1.5:80(dst) 192.168.65.1:0 - default
=&amp;gt;  이 로그는 webapp 서비스가 catalog 서비스로 HTTP 요청을 보낸 상황이에요. Envoy는 catalog.istioinaction이라는 Kubernetes catalog 서비스(clusterIp 10.200.1.5:80)로 라우팅하고, 실제 Pod IP는 10.10.0.13:3000으로 연결되었어요.
...
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c23802098ded63af3f5af0e&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;493&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rdCTb/btsNAMmNBAP/2N3d1syoxiXGUTRJ1xnqp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rdCTb/btsNAMmNBAP/2N3d1syoxiXGUTRJ1xnqp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rdCTb/btsNAMmNBAP/2N3d1syoxiXGUTRJ1xnqp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrdCTb%2FbtsNAMmNBAP%2F2N3d1syoxiXGUTRJ1xnqp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;864&quot; height=&quot;333.23984&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;493&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1deb8b2c1c23802d9823cb763e3e4e51&quot; data-ke-size=&quot;size16&quot;&gt;Let&amp;rsquo;s create &lt;b&gt;VirtualService&lt;/b&gt; and DestinationRule resources that route &lt;b&gt;all traffic to v1 &lt;/b&gt;of the &lt;b&gt;catalog&lt;/b&gt; service&lt;/p&gt;
&lt;div id=&quot;block-1deb8b2c1c23800ba79de5092f4c7ce7&quot;&gt;Copy
&lt;pre class=&quot;yaml&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;#
ch5/catalog-dest-rule.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: catalog
spec:
  host: catalog.istioinaction.svc.cluster.local
  subsets:
  - name: version-v1
    labels:
      version: v1
  - name: version-v2
    labels:
      version: v2
      
kubectl apply -f ch5/catalog-dest-rule.yaml -n istioinaction

# istio-proxy
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system --fqdn catalog.istioinaction.svc.cluster.local
SERVICE FQDN                                PORT     SUBSET         DIRECTION     TYPE     DESTINATION RULE
catalog.istioinaction.svc.cluster.local     80       -              outbound      EDS      catalog.istioinaction
catalog.istioinaction.svc.cluster.local     80       version-v1     outbound      EDS      catalog.istioinaction
catalog.istioinaction.svc.cluster.local     80       version-v2     outbound      EDS      catalog.istioinaction

docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system | egrep 'ENDPOINT|istioinaction'
ENDPOINT                                                STATUS      OUTLIER CHECK     CLUSTER
10.10.0.16:3000                                         HEALTHY     OK                outbound|80|version-v1|catalog.istioinaction.svc.cluster.local
10.10.0.16:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local
10.10.0.17:3000                                         HEALTHY     OK                outbound|80|version-v2|catalog.istioinaction.svc.cluster.local
10.10.0.17:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local
10.10.0.18:8080                                         HEALTHY     OK                outbound|80||webapp.istioinaction.svc.cluster.local

#
cat ch5/catalog-vs-v1-mesh.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: catalog
spec:
  hosts:
  - catalog
  gateways: # 만약, gateways 부분을 제외하고 배포하면 암묵적으로 mesh gateways가 적용됨.
    - mesh  # VirtualService는 istio-proxy가 적용된 서비스 메시 내의 모든 사이드카(현재 webapp, catalog pod에 sidecar로 istio-proxy가 존재)에 적용된다. edge는 제외.
  http:
  - route:
    - destination:
        host: catalog
        subset: version-v1

kubectl apply -f ch5/catalog-vs-v1-mesh.yaml -n istioinaction

# VirtualService 확인 : GATEWAYS 에 mesh 확인
kubectl get vs -n istioinaction
NAME                    GATEWAYS                HOSTS                         AGE
catalog                 [&quot;mesh&quot;]                [&quot;catalog&quot;]                   12s
webapp-virtualservice   [&quot;coolstore-gateway&quot;]   [&quot;webapp.istioinaction.io&quot;]   28s


# 반복 호출테스트 : 신규터미널 2개에 아래 각각 실행 해두기 &amp;gt;&amp;gt; 현재는 v1만 라우팅 처리
while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog -I | head -n 1 ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done
while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog -H &quot;x-istio-cohort: internal&quot; -I | head -n 1 ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 2; echo; done


# webapp &amp;rarr; catalog 호출도 istio 의 DestinationRule 라우팅 전달 처리! : 신규터미널
# mesh gateways가 적용됨!
kubectl logs -n istioinaction -l app=webapp -c istio-proxy -f
[2025-04-23T15:45:08.769Z] &quot;GET /items HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 502 3 3 &quot;192.168.65.1&quot; &quot;beegoServer&quot; &quot;05743f3d-4f03-4d83-a036-636f77bea0fc&quot; &quot;catalog.istioinaction:80&quot; &quot;10.10.0.12:3000&quot; outbound|80|version-v1|catalog.istioinaction.svc.cluster.local 10.10.0.14:45682 10.200.1.5:80 192.168.65.1:0 - -
=&amp;gt; 이 로그는 webapp이 내부적으로 catalog 서비스를 호출하는 로그이고, version-v1이라는 **서브셋(subset)**으로 요청이 라우팅되었어요. 이는 DestinationRule에서 subset: version-v1으로 정의된 엔드포인트로 라우팅이 잘 되었다는 뜻이에요. 


# proxy-config (webapp) : 기존에 webapp 에서 catalog 로 VirtualService 정보는 없었는데, 추가됨을 확인
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/webapp.istioinaction | egrep 'NAME|catalog'
NAME                                                          DOMAINS                                             MATCH                  VIRTUAL SERVICE
80                                                            catalog, catalog.istioinaction + 1 more...          /*                     catalog.istioinaction

docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/webapp.istioinaction --name 80 -o json &amp;gt; webapp-routes.json
cat webapp-routes.json | jq
...
    &quot;virtualHosts&quot;: [
      {
        &quot;name&quot;: &quot;catalog.istioinaction.svc.cluster.local:80&quot;,
        &quot;domains&quot;: [
          &quot;catalog.istioinaction.svc.cluster.local&quot;,
          &quot;catalog&quot;,
          &quot;catalog.istioinaction.svc&quot;,
          &quot;catalog.istioinaction&quot;,
          &quot;10.200.1.5&quot; # 해당 IP는 catalog service(clusterIP)
        ],
        &quot;routes&quot;: [
          {
            &quot;match&quot;: {
              &quot;prefix&quot;: &quot;/&quot;
            },
            &quot;route&quot;: {
              &quot;cluster&quot;: &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;,
              &quot;timeout&quot;: &quot;0s&quot;,
...


docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/webapp.istioinaction --fqdn catalog.istioinaction.svc.cluster.local
SERVICE FQDN                                PORT     SUBSET         DIRECTION     TYPE     DESTINATION RULE
catalog.istioinaction.svc.cluster.local     80       -              outbound      EDS      catalog.istioinaction
catalog.istioinaction.svc.cluster.local     80       version-v1     outbound      EDS      catalog.istioinaction
catalog.istioinaction.svc.cluster.local     80       version-v2     outbound      EDS      catalog.istioinaction

docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/webapp.istioinaction --subset version-v1 -o json
...
        &quot;name&quot;: &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;,
        &quot;type&quot;: &quot;EDS&quot;,
...

docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/webapp.istioinaction | egrep 'ENDPOINT|catalog'
ENDPOINT                                                STATUS      OUTLIER CHECK     CLUSTER
10.10.0.16:3000                                         HEALTHY     OK                outbound|80|version-v1|catalog.istioinaction.svc.cluster.local
10.10.0.16:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local
10.10.0.17:3000                                         HEALTHY     OK                outbound|80|version-v2|catalog.istioinaction.svc.cluster.local
10.10.0.17:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local

# proxy-config (catalog) : gateway.mesh 이므로, 메시 내에 모든 사이드카에 VirtualService 적용됨을 확인. 아래 routes 부분
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/catalog.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/catalog.istioinaction | egrep 'NAME|catalog'
NAME                                                          DOMAINS                                             MATCH                  VIRTUAL SERVICE
80                                                            catalog, catalog.istioinaction + 1 more...          /*                     catalog.istioinaction

docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/catalog.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/catalog.istioinaction
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c238063a32ec9692b12ff28&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6j2vY/btsNCxBDDDh/DrDKEr6EsuVKJU0TasWosk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6j2vY/btsNCxBDDDh/DrDKEr6EsuVKJU0TasWosk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6j2vY/btsNCxBDDDh/DrDKEr6EsuVKJU0TasWosk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6j2vY%2FbtsNCxBDDDh%2FDrDKEr6EsuVKJU0TasWosk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;912&quot; height=&quot;229.49019&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;308&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c2380f68bcadbed1978fa0d&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8ZCXI/btsNA4AHkz9/IeyRqBYp51l11qpEKzclQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8ZCXI/btsNA4AHkz9/IeyRqBYp51l11qpEKzclQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8ZCXI/btsNA4AHkz9/IeyRqBYp51l11qpEKzclQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8ZCXI%2FbtsNA4AHkz9%2FIeyRqBYp51l11qpEKzclQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;912&quot; height=&quot;182.62477&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1deb8b2c1c2380d58d61e880006781b1&quot;&gt;DR은 DestinationRule이고, VS는 VirtualService이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1deb8b2c1c2380e18198dcd94e44fa7c&quot;&gt;Copy
&lt;pre class=&quot;perl&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;#
cat ch5/catalog-vs-v2-request-mesh.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: catalog
spec:
  hosts:
  - catalog
  gateways:
    - mesh
  http:
  - match:
    - headers:
        x-istio-cohort:
          exact: &quot;internal&quot;
    route:
    - destination:
        host: catalog
        subset: version-v2
  - route:
    - destination:
        host: catalog
        subset: version-v1

kubectl apply -f ch5/catalog-vs-v2-request-mesh.yaml -n istioinaction


# 반복 호출테스트 : 신규터미널 2개에 아래 각각 실행 &amp;gt;&amp;gt; v1, v2 각기 라우팅 확인
while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog -I | head -n 1 ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done
while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog -H &quot;x-istio-cohort: internal&quot; -I | head -n 1 ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 2; echo; done


# proxy-config (webapp) : 기존에 webapp 에서 catalog 로 VirtualService 추가된 2개 항목 확인(v1, v2 두개의 route를 위에서 생성함!)
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/webapp.istioinaction | egrep 'NAME|catalog'
NAME                                                          DOMAINS                                             MATCH                  VIRTUAL SERVICE
80                                                            catalog, catalog.istioinaction + 1 more...          /*                     catalog.istioinaction
80                                                            catalog, catalog.istioinaction + 1 more...          /*                     catalog.istioinaction

docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/webapp.istioinaction --name 80 -o json &amp;gt; webapp-routes.json
cat webapp-routes.json | jq
...
        &quot;virtualHosts&quot;: [
            {
                &quot;name&quot;: &quot;catalog.istioinaction.svc.cluster.local:80&quot;,
                &quot;domains&quot;: [
                    &quot;catalog.istioinaction.svc.cluster.local&quot;,
                    &quot;catalog&quot;,
                    &quot;catalog.istioinaction.svc&quot;,
                    &quot;catalog.istioinaction&quot;,
                    &quot;10.200.1.5&quot;
                ],
                &quot;routes&quot;: [
                    {
                        &quot;match&quot;: {
                            &quot;prefix&quot;: &quot;/&quot;,
                            &quot;caseSensitive&quot;: true,
                            &quot;headers&quot;: [
                                {
                                    &quot;name&quot;: &quot;x-istio-cohort&quot;,
                                    &quot;stringMatch&quot;: {
                                        &quot;exact&quot;: &quot;internal&quot;
                                    }
                                }
                            ]
                        },
                        &quot;route&quot;: {
                            &quot;cluster&quot;: &quot;outbound|80|version-v2|catalog.istioinaction.svc.cluster.local&quot;,
                     ....
                    {
                        &quot;match&quot;: {
                            &quot;prefix&quot;: &quot;/&quot;
                        },
                        &quot;route&quot;: {
                            &quot;cluster&quot;: &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;,
...


docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/webapp.istioinaction --fqdn catalog.istioinaction.svc.cluster.local
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/webapp.istioinaction | egrep 'ENDPOINT|catalog'

# proxy-config (catalog) : mesh 이므로 VS가 아래 routes(catalog)에도 적용됨
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/catalog.istioinaction

docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/catalog.istioinaction | egrep 'NAME|catalog'
NAME                                                          DOMAINS                                             MATCH                  VIRTUAL SERVICE
80                                                            catalog, catalog.istioinaction + 1 more...          /*                     catalog.istioinaction
80                                                            catalog, catalog.istioinaction + 1 more...          /*                     catalog.istioinaction

docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/catalog.istioinaction --fqdn 'catalog.istioinaction.svc.cluster.local'
SERVICE FQDN                                PORT     SUBSET         DIRECTION     TYPE     DESTINATION RULE
catalog.istioinaction.svc.cluster.local     80       -              outbound      EDS      catalog.istioinaction
catalog.istioinaction.svc.cluster.local     80       version-v1     outbound      EDS      catalog.istioinaction
catalog.istioinaction.svc.cluster.local     80       version-v2     outbound      EDS      catalog.istioinaction

docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/catalog.istioinaction
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1deb8b2c1c23802a81a2fe7e2c6691a9&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1229&quot; data-origin-height=&quot;452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m5nIk/btsNCoro9vK/0IJqf0dcnlKM1Sc5aEm811/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m5nIk/btsNCoro9vK/0IJqf0dcnlKM1Sc5aEm811/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m5nIk/btsNCoro9vK/0IJqf0dcnlKM1Sc5aEm811/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm5nIk%2FbtsNCoro9vK%2F0IJqf0dcnlKM1Sc5aEm811%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;864&quot; height=&quot;317.76077&quot; data-origin-width=&quot;1229&quot; data-origin-height=&quot;452&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dfb8b2c1c2380e88221d871963638a5&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5.3 Traffic shifting&lt;/b&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt; (실습)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;block-1dfb8b2c1c23807aa7bdc8b6c30e28a7&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;Manual Canary release&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dfb8b2c1c238078ad54de26e8fe9884&quot;&gt;이 절에서는 배포를 &amp;lsquo;카나리 &lt;span style=&quot;color: #787673;&quot;&gt;canary&lt;/span&gt;&amp;rsquo;하거나 점진적으로 릴리스 &lt;span style=&quot;color: #787673;&quot;&gt;incrementally release&lt;/span&gt; 하는 &lt;b&gt;또 다른 방법&lt;/b&gt;을 살펴본다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c238099a7c5d87f3fc8cc9c&quot;&gt;이전 절에서는 헤더 비교를 기반해 특정 사용자 그룹에 다크 런치 &lt;span style=&quot;color: #787673;&quot;&gt;dark launch&lt;/span&gt; 를 수행하는 라우팅을 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380b18296c1302021e0cc&quot;&gt;이 절에서는 가중치를 기반으로 특정 서비스의 여러 버전에 라이브 트래픽을 분배해본다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c23808fbdeac3dbc5de603a&quot;&gt;예를 들어 catalog 서비스 v2를 내부 직원에게 다크 런치했고 이 버전을 모두에게 천천히 릴리스하고 싶다면, v2의 라우팅 가중치를 10%로 지정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c23805a872af2f79fb0d7c9&quot;&gt;catalog로 향하는 전체 트래픽의 10%는 v2로 가고 90%는 여전히 v1으로 갈 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c23802c978ef05ee5e4c2e8&quot;&gt;이렇게 하면, 전체 트래픽 중 얼마만큼이 v2 코드에 부정적 영향을 받을지 제어함으로써 릴리스의 위험성을 더욱 줄일 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dfb8b2c1c23805ca05dc0a2c0cfaf3b&quot;&gt;다크 런치와 마찬가지로 서비스에 오류가 있는지 모니터링하고 관찰하려고 하며, 문제가 있으면 릴리스를 롤백하려고 한다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380718720ef5c19faee31&quot;&gt;이 경우, 롤백은 catalog v2 서비스로 가는 트래픽 가중치를 줄이는 것만큼(필요한 경우 다시 0%까지) 간단하다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c23803a99ddd9a354707381&quot;&gt;이스티오로 가중치 기반의 트래픽 전환을 수행하는 방법을 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dfb8b2c1c23805dbea5f7a04b02986e&quot;&gt;Copy
&lt;pre class=&quot;yaml&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;# 이전 절부터 다음 서비스가 실행 중이다 : 파드에 labels 에 버전 정보 없을 경우 latest 설정되며, kiali 에 Workloads Details 에 'Missing Version' 표기됨
kubectl apply -f services/webapp/kubernetes/webapp.yaml -n istioinaction # 이미 배포 상태
kubectl apply -f services/catalog/kubernetes/catalog.yaml -n istioinaction # 이미 배포 상태
kubectl apply -f services/catalog/kubernetes/catalog-deployment-v2.yaml -n istioinaction # 이미 배포 상태
kubectl get deploy,rs,pod -n istioinaction --show-labels
NAME                         READY   UP-TO-DATE   AVAILABLE   AGE   LABELS
deployment.apps/catalog      1/1     1            1           23h   app=catalog,version=v1
deployment.apps/catalog-v2   1/1     1            1           23h   app=catalog,version=v2
deployment.apps/webapp       1/1     1            1           23h   app=webapp

# 반복 호출테스트 : 신규터미널
while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done

# 모든 트래픽을 catalog service v1 으로 재설정하자
cat ch5/catalog-vs-v1-mesh.yaml
...
  http:
  - route:
    - destination:
        host: catalog
        subset: version-v1

kubectl apply -f ch5/catalog-vs-v1-mesh.yaml -n istioinaction

# 호출테스트
curl -s http://webapp.istioinaction.io:30000/api/catalog | jq
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380779ebcf19cc4857359&quot;&gt;트래픽 중 10%를 catalog v2 로 라우팅해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dfb8b2c1c238036a356f55b1c8a0359&quot;&gt;Copy
&lt;pre class=&quot;yaml&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;#
cat ch5/catalog-vs-v2-10-90-mesh.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: catalog
spec:
  hosts:
  - catalog
  gateways:
  - mesh
  http:
  - route:
    - destination:
        host: catalog
        subset: version-v1
      weight: 90
    - destination:
        host: catalog
        subset: version-v2
      weight: 10 
kubectl apply -f ch5/catalog-vs-v2-10-90-mesh.yaml -n istioinaction

#
kubectl get vs -n istioinaction catalog
NAME      GATEWAYS   HOSTS         AGE
catalog   [&quot;mesh&quot;]   [&quot;catalog&quot;]   112s

# 호출 테스트 : v2 호출 비중 확인 10:90의 비율로 출력됨
for i in {1..10};  do curl -s http://webapp.istioinaction.io:30000/api/catalog | grep -i imageUrl ; done | wc -l
1

for i in {1..100}; do curl -s http://webapp.istioinaction.io:30000/api/catalog | grep -i imageUrl ; done | wc -l
7

# proxy-config(webapp) : mesh 이므로 메시 내 모든 사이드카에 VS 적용
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/webapp.istioinaction --name 80 -o json
...
                        &quot;route&quot;: {
                            &quot;weightedClusters&quot;: {
                                &quot;clusters&quot;: [
                                    {
                                        &quot;name&quot;: &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;,
                                        &quot;weight&quot;: 90
                                    },
                                    {
                                        &quot;name&quot;: &quot;outbound|80|version-v2|catalog.istioinaction.svc.cluster.local&quot;,
                                        &quot;weight&quot;: 10
                                    }
                                ],
                                &quot;totalWeight&quot;: 100
...

docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/webapp.istioinaction --fqdn catalog.istioinaction.svc.cluster.local
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/webapp.istioinaction | grep catalog


# proxy-config(catalog) : mesh 이므로 메시 내 모든 사이드카에 VS 적용
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/catalog.istioinaction --name 80 -o json
...
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380d6baeddcf23b19171e&quot;&gt;트래픽을 50:50 반반으로 라우팅 해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dfb8b2c1c2380ba860ee20e7efd8e8a&quot;&gt;Copy
&lt;pre class=&quot;yaml&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;#
cat ch5/catalog-vs-v2-50-50-mesh.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: catalog
spec:
  hosts:
  - catalog
  gateways:
  - mesh
  http:
  - route:
    - destination:
        host: catalog
        subset: version-v1
      weight: 50
    - destination:
        host: catalog
        subset: version-v2
      weight: 50
kubectl apply -f ch5/catalog-vs-v2-50-50-mesh.yaml -n istioinaction

# 호출 테스트 : v2 호출 비중 확인
for i in {1..10};  do curl -s http://webapp.istioinaction.io:30000/api/catalog | grep -i imageUrl ; done | wc -l
5

for i in {1..100}; do curl -s http://webapp.istioinaction.io:30000/api/catalog | grep -i imageUrl ; done | wc -l
57

# proxy-config(webapp) 
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/webapp.istioinaction --name 80 -o json
...
                      &quot;route&quot;: {
                            &quot;weightedClusters&quot;: {
                                &quot;clusters&quot;: [
                                    {
                                        &quot;name&quot;: &quot;outbound|80|version-v1|catalog.istioinaction.svc.cluster.local&quot;,
                                        &quot;weight&quot;: 50
                                    },
                                    {
                                        &quot;name&quot;: &quot;outbound|80|version-v2|catalog.istioinaction.svc.cluster.local&quot;,
                                        &quot;weight&quot;: 50
                                    }
                                ],
                                &quot;totalWeight&quot;: 100
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380a6b33eca00a9aea770&quot;&gt;각 서비스 버전의 트래픽 가중치를 1에서 100 사이로 바꿀 수 있지만, 가중치 총합은 반드시 100이어야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380d1942ce976938ca25e&quot;&gt;그렇지 않으면 예기치 못한 트래픽 라우팅이 발생할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c238067838fef6dd6934ed8&quot;&gt;v1, v2 외 다른 버전이 있을 경우, DestinationRule 에서 subnet 으로 선언해야 한다는 것도 유념하자.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c238088b76ddfca161b7109&quot;&gt;예시로는 ch5/catalog-dest-rule.yaml 을 참조하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dfb8b2c1c23803fbe41c41b06e8ee1e&quot; data-ke-size=&quot;size16&quot;&gt;이 절에서는 여러 버전 사이에서 트래픽을 단계적으로 옮기는 작업을 수작업으로 수행했다.&lt;/p&gt;
&lt;p id=&quot;block-1dfb8b2c1c2380fa82d6cd36e0688b8e&quot; data-ke-size=&quot;size16&quot;&gt;이상적으로는 이 트래픽 전환을 어떤 도구나 CI/CD 파이프라인의 배포 파이프라인에서 자동화하고 싶다.&lt;/p&gt;
&lt;p id=&quot;block-1dfb8b2c1c23802e90b4d4d54a0d9e28&quot; data-ke-size=&quot;size16&quot;&gt;다음 절에서는 이런 카나리 릴리스 프로세스 자동화를 돕는 도구를 살펴본다.&lt;/p&gt;
&lt;div id=&quot;block-1dfb8b2c1c238066a25ed02749999a76&quot; style=&quot;background-color: #e6e6e5;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;text-align: center;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p id=&quot;block-1dfb8b2c1c2380f3932bc78fa92c63b6&quot; data-ke-size=&quot;size16&quot;&gt;소프트웨어 새 버전을 천천히 출시할 때는 구 버전과 신 버전을 모두 모니터링하고 관찰해 안정성, 성능, 정확성 등을 확인해야 한다. 문제를 발견하면 가중치를 변경해 구 버전으로 쉽게 롤백할 수 있다. 이 방식을 사용할 때는 여러 버전을 동시에 실행할 수 있도록 서비스를 구축해야 한다는 점도 명심하자. 서비스가 더 많은 상태를 갖고 있을 수록(심지어 외부 상태에 의존한다 하더라고) 이런 작업은 더 어려워질 수 있다. 이 주제에 대한 자세한 내용은 우리의 블로그 포스트를 참조하자. &lt;a href=&quot;https://blog.christianposta.com/microservices/traffic-shadowing-with-istio-reduce-the-risk-of-code-release/&quot;&gt;https://blog.christianposta.com/microservices/traffic-shadowing-with-istio-reduce-the-risk-of-code-release/&lt;/a&gt; &lt;a href=&quot;https://blog.christianposta.com/microservices/advanced-traffic-shadowing-patterns-for-microservices-with-istio-service-mesh/&quot;&gt;https://blog.christianposta.com/microservices/advanced-traffic-shadowing-patterns-for-microservices-with-istio-service-mesh/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dfb8b2c1c2380c7962cd54e434af254&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;5.3.1 (Automating) Canary releasing with Flagger&lt;/b&gt; (Progressive Delivery Operator for Kubernetes) - &lt;a style=&quot;color: #000000;&quot; href=&quot;https://flagger.app/&quot;&gt;Link&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380aa82b4f8ece5dc1837&quot;&gt;이전 절 에서 본 것처럼 이스티오는 트래픽 라우팅을 제어하는 강력한 기능을 운영자에게 제공하지만, 라우팅 변경과 새로운 설정 적용은 CLI에서 수동으로 해야 한다. 또한 여러 버전의 설정을 만들었기 때문에 작업도 더 많았고 설정이 잘못될 가능성도 있었다. 수백 개의 릴리스가 동시에 진행될 수도 있으므로, 카나리를 수행할 때 사람에 의한 이와 같은 수작업을 피하길 원하며 실수 가능성도 줄이고 싶다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c238045be45de534a53c3f1&quot;&gt;Flagger 같은 것을 사용하면 서비스 릴리스를 자동화할 수 있다. &lt;b&gt;Flagger&lt;/b&gt;는 스테판 프로단 &lt;span style=&quot;color: #787673;&quot;&gt;Stefan Prodan&lt;/span&gt; 이 만든 카나리 자동화 도구로, 릴리스를 어떻게 수행할지, 언제 더 많은 사용자에게 릴리스를 개방할지, 릴리스가 문제를 일으킬 경우 언제 롤백할지 등에 관련된 파라미터를 지정할 수 있다. Flagger는 릴리스를 수행하는 데 필요한 작절한 설정을 모두 만든다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380c5b38cda04e1400192&quot;&gt;이스티오와 Flagger를 함께 사용하는 방법을 살펴보자.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c23805e940ff40caf05fec4&quot;&gt;이전 절에서는 catalog-v2 와 트래픽 라우팅을 명시적으로 제어하는 VirtualService를 배포했다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c23802691a4fa719ef16507&quot;&gt;이 둘을 제거하고 Flagger가 라우팅과 배포 변경을 처리하게 하자.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c238054b164e199a7a0b9b4&quot;&gt;&lt;b&gt;Flagger&lt;/b&gt;는 서비스 상태를 판단할 때 &lt;b&gt;메트릭&lt;/b&gt;에 의존하며, 카나리 릴리스를 사용할 때 특히 그렇다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c23803c9680fc7867ea29e2&quot;&gt;Flagger가 &lt;b&gt;성공 메트릭&lt;/b&gt;을 사용하려면 &lt;b&gt;프로메테우스&lt;/b&gt;를 설치해&lt;b&gt; 이스티오 데이터 플레인&lt;/b&gt;을 &lt;b&gt;수집해&lt;/b&gt;야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380b69e4ed300e62a8c5b&quot;&gt;이 책의 예제를 따라오고 있다면, 프로메테우스 샘플이 이미 설치돼 있을 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380faa87fe4abb321f1c7&quot;&gt;다음으로는 Flagger를 설치하려고 한다. helm 사용. &lt;a href=&quot;https://docs.flagger.app/install/flagger-install-on-kubernetes&quot;&gt;https://docs.flagger.app/install/flagger-install-on-kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380569ddbc0769a27521a&quot;&gt;아래 코드 처럼 Flagger Canara 리소스를 사용해 카나리 릴리스의 파라미터를 지정하고, Flagger가 적절한 리로스를 만들어 이 릴리스를 주관하게 할 것이다. - &lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.flagger.app/usage/how-it-works&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c23802eba0be1bc4732f7b6&quot;&gt;위 설정을 적용하고 catalog 서비스를 자동으로 v2로 카나리하는 절차를 시작해보자&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380248f14e26a8617d6c2&quot;&gt;지금까지는 기본 설정만 준비 했을 뿐, 실제 카나리는 수행하지 않았다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380ca9871ebf7c596311d&quot;&gt;Flagger는 &lt;b&gt;원본 디폴로이먼트&lt;/b&gt; 대상(여기서는 &lt;b&gt;catalog&lt;/b&gt; 디플로이먼트 &lt;s&gt;&lt;span style=&quot;color: #787673;&quot;&gt;?catalog-primary가 아닌가?&lt;/span&gt;&lt;/s&gt;)의&lt;b&gt; 변경 사항을 지켜&lt;/b&gt;보고, &lt;b&gt;카나리 디폴로이먼트&lt;/b&gt;(catalog-&lt;b&gt;canary&lt;/b&gt;) 및 &lt;b&gt;서비스&lt;/b&gt;(catalog-&lt;b&gt;canary&lt;/b&gt;)를 생성하고, &lt;b&gt;VirtualService 의 가중치를 조정&lt;/b&gt;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380e49a5bd39904d8f59b&quot;&gt;이제 catalog v2 를 도입하고 Flagger가 어떻게 릴리스에서 이를 자동화하는지, 어떻게 메트릭에 기반해 의사결정을 내리는지 살펴보자.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380c9923aec25c9e5d786&quot;&gt;또한 Flagger가 정상 메트릭 기준선을 가져올 수 있도록 이스티오를 통해 서비스에 대한 부하를 만들어보자.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c23803ba406edd39963f23f&quot;&gt;카나리 과정 중 kiali 확인&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c23804c87d2d4eb28007600&quot;&gt;프로메테우스에서 확인 : flagger_canary_weight - &lt;a style=&quot;color: #000000;&quot; href=&quot;http://127.0.0.1:30001/graph?g0.expr=flagger_canary_weight&amp;amp;g0.tab=0&amp;amp;g0.stacked=0&amp;amp;g0.show_exemplars=0&amp;amp;g0.range_input=15m&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380d289fefa3701be0844&quot;&gt;Flagger를 사용해 이스티오의 API로 카나리 릴리스를 자동 제어함으로써, 리소스를 직접 설정하는 등 설정 오류를 일으킬 수 있는 수작업의 필요성을 없앴다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380f48c01ea71aa066be2&quot;&gt;또한 Flagger는 다크 런치 테스트, 트래픽 미러링(다음 절에서 설명한다) 등도 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380b28796fcc0781ce23b&quot;&gt;관련 내용은 웹 사이트를 참고하자. &lt;a href=&quot;https://docs.flagger.app/usage/deployment-strategies&quot;&gt;https://docs.flagger.app/usage/deployment-strategies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dfb8b2c1c238008a0a4ca776fcf6afa&quot;&gt;실습을 정리하고 이 장을 계속 진행할 수 있는 상태로 만들기 위해 Flagger Canary 리소스를 제거한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dfb8b2c1c23804c9927dc14af344aab&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5.4 Reducing risk even further: Traffic mirroring&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;block-1dfb8b2c1c2380b9b8b7d8a9f2593f3d&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;5.4.1. 트래픽 미러링 소개&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dfb8b2c1c23803fa051d772f05de0e2&quot;&gt;앞서 살펴본 요청 수준 라우팅과 트래픽 전환이라는 두 가지 기술을 사용하면 릴리스의 위험성을 낮출 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380a4a240cad4be192ca3&quot;&gt;두 기술 모두 라이브 트래픽과 요청을 사용하므로, 영향의 파급 범위를 아무리 제어하더라도 사용자에게 영향을 줄 수 있었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380c7bddafd6172bc931c&quot;&gt;또 다른 접근법은 운영 환경 트래픽을 새 디플로이먼트로 미러링하는 것으로, 그림 5.10처럼 운영 환경 트래픽을 복사해 고객 트래픽 범위 외부의 새 디플로이먼트로 보내는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380d790c1ee769f0543f1&quot;&gt;미러링 방식을 사용하면, 실제 운영 환경 트래픽을 배포로 보냄으로써 사용자에게 영향을 주지 않고 새 코드가 어떻게 동작할지에 대한 실제 피드백을 얻을 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380a4b2edd9a19b33252b&quot;&gt;이스티오는 트래픽 미러링을 지원하며, 이는 배포 및 릴리스 수행의 위험성을 다른 두 방식보다 휠씬 더 줄일 수 있다. 한번 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dfb8b2c1c238042abbcfd132c56f764&quot; style=&quot;background-color: #e6e6e5;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;text-align: center;&quot;&gt;❓&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p id=&quot;block-1dfb8b2c1c23801db7b9e2905abebc71&quot; data-ke-size=&quot;size16&quot;&gt;미러링 &lt;b&gt;Mirroring&lt;/b&gt; vs. 복제 &lt;b&gt;Replication&lt;/b&gt; 의 용어의 차이? 동작의 차이는?&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dfb8b2c1c2380798fb9f77f8cc4d88d&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;5.4.2. 실습 환경 초기화 &lt;/b&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;(실습)&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div id=&quot;block-1dfb8b2c1c238059a902dbfa834e2ed5&quot;&gt;Copy
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;# catalog 디플로이먼트를 초기 상태로 돌리고, catalog-v2 를 별도의 디플로이먼트로 배포
kubectl apply -f services/catalog/kubernetes/catalog-svc.yaml -n istioinaction
kubectl apply -f services/catalog/kubernetes/catalog-deployment.yaml -n istioinaction
kubectl apply -f services/catalog/kubernetes/catalog-deployment-v2.yaml -n istioinaction
kubectl apply -f ch5/catalog-dest-rule.yaml -n istioinaction
kubectl apply -f ch5/catalog-vs-v1-mesh.yaml -n istioinaction

# 확인
kubectl get deploy -n istioinaction -o wide
NAME         READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                         SELECTOR
catalog      1/1     1            1           8s    catalog      istioinaction/catalog:latest   app=catalog,version=v1
catalog-v2   1/1     1            1           8s    catalog      istioinaction/catalog:latest   app=catalog,version=v2
webapp       1/1     1            1           24h   webapp       istioinaction/webapp:latest    app=webapp

kubectl get svc,ep -n istioinaction -owide
NAME              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE   SELECTOR
service/catalog   ClusterIP   10.200.1.89            80/TCP    16s   app=catalog
service/webapp    ClusterIP   10.200.1.111           80/TCP    24h   app=webapp

NAME                ENDPOINTS                         AGE
endpoints/catalog   10.10.0.20:3000,10.10.0.21:3000   16s
endpoints/webapp    10.10.0.14:8080                   24h

kubectl get gw,vs -n istioinaction
NAME                                            AGE
gateway.networking.istio.io/coolstore-gateway   24h

NAME                                                       GATEWAYS                HOSTS                         AGE
virtualservice.networking.istio.io/catalog                 [&quot;mesh&quot;]                [&quot;catalog&quot;]                   22s
virtualservice.networking.istio.io/webapp-virtualservice   [&quot;coolstore-gateway&quot;]   [&quot;webapp.istioinaction.io&quot;]   24h

# 반복 접속
while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog -I | head -n 1 ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done

# catalog v1 으로만 접속 확인
for i in {1..100}; do curl -s http://webapp.istioinaction.io:30000/api/catalog | grep -i imageUrl ; done | wc -l
0&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dfb8b2c1c238012b431c2034173a574&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1214&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQWtud/btsNA8b1oV9/ICZ0SQRHVHbBnTrSjEuQi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQWtud/btsNA8b1oV9/ICZ0SQRHVHbBnTrSjEuQi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQWtud/btsNA8b1oV9/ICZ0SQRHVHbBnTrSjEuQi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQWtud%2FbtsNA8b1oV9%2FICZ0SQRHVHbBnTrSjEuQi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;816&quot; height=&quot;202.99176&quot; data-origin-width=&quot;1214&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dfb8b2c1c23803e82f2dbf34eacc61c&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;5.4.3. 트래픽 미러링 &lt;/b&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;(실습)&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380dd8236d9cd4231e9d0&quot;&gt;미러링 수행이 필요한 VS 확인&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380d49cdeed14532da476&quot;&gt;VS 리소스를 만들어보자&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380ba966ac305c41b4d26&quot;&gt;트래픽 미러링은 릴리스의 위험성을 낮추는 방법 중 하나다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c23803f8234c6f3d1b4716c&quot;&gt;요청 라우팅 및 트래픽 전환과 마찬가지로 애플리케이션은 상황을 인지해 실제와 미러링 모드 모두로 동작하거나, 여러 버전으로 동작하거나, 혹은 둘 다 모두 할 수 있어야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c23807c8f83f988268d4d83&quot;&gt;자세한 내용은 우리의 블로그 게시물을 참조하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dfb8b2c1c238060b402d7f1a2c2e8ff&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;5.4.4. Istio 트러블 슈팅&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380bba6b0e8cc789da12c&quot;&gt;&lt;b&gt;503 upstream connect error or disconnect/reset before headers. reset reason: connection termination Error&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dfb8b2c1c2380058fbfc0ef0f60258e&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5.5 Routing to services outside your cluster by using Istio&amp;rsquo;s service discovery&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;block-1dfb8b2c1c2380658adef55cb46ca3c9&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;5.5.1. 들어가며&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dfb8b2c1c2380cd8b86fe6077bbc1b2&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;5.5.2. 외부 트래픽을 차단하도록 이스티오를 설정해 메시에 간단한 보호 계층을 더해보자. (그림 5.11참조). &lt;/b&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt; (실습)&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dfb8b2c1c23806b9243c6ff5ddc839a&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;ServiceEntry 소개 : &lt;/b&gt;이스티오의 서비스 디스커버리 기능을 사용해 클러스터 외부의 서비스로 라우팅하기&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dfb8b2c1c23800f95b1e2268fc4c876&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;ServiceEntry &lt;/b&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;(실습)&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dfb8b2c1c23806d9592c394f35d4082&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;(추가 실습) 외부에 web 서버(&lt;/span&gt;&lt;a href=&quot;https://httpbin.org/&quot;&gt;https://httpbin.org/&lt;/a&gt;&lt;span style=&quot;color: #787673;&quot;&gt; or docker container nginx 1대 기동 후)에 Istio 에 ServiceEntry 등록 후 통신 허용 설정 해보자&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dfb8b2c1c238035ab9ee10e4b8f6a56&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5.6. Summary&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dfb8b2c1c23803f892cdab795b47de4&quot;&gt;&lt;b&gt;DestinationRule&lt;/b&gt; 로 워크로드를 v1, v2 버전과 같이 더 작은 부분집합들로 분리할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380318f26fbb9dbca2fe7&quot;&gt;&lt;b&gt;VirtualService&lt;/b&gt;는 이런 부분집합들을 사용해 트래픽을 세밀하게 라우팅한다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c23806287f2c61e1487685d&quot;&gt;VirtualService는 HTTP 헤더 같은 애플리케이션 계층 정보를 기반으로 라우팅 결정을 설정한다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380ada83ce8b88eb1c380&quot;&gt;&lt;b&gt;가중치&lt;/b&gt; 라우팅(VirtualService 리소스로 설정)을 사용하는 서비스 프록시는 트래픽을 점진적으로 새 배포로 라우팅할 수 있는데, 덕분에 &lt;b&gt;카나리&lt;/b&gt; 배포(트래픽 전환이라고도 함) 같은 방법을 사용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380aa9cafd813d8638424&quot;&gt;트래픽 전환은 &lt;b&gt;Flagger&lt;/b&gt;를 사용해 &lt;b&gt;자동화&lt;/b&gt;할 수 있다. Flagger는 수집한 메트릭을 사용해 새 배포로 라우팅되는 트래픽을 점진적으로 늘리는 오픈소스 솔루션이다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c238098a942f6d4890fba40&quot;&gt;&lt;b&gt;outboundTrafficPolicy&lt;/b&gt; 를 &lt;b&gt;REGISTER_ONLY&lt;/b&gt;로 설정하면 어떤 트래픽도 클러스터를 떠나지 못하게 함으로써 악의적인 사용자가 외부로 정보를 전송하는 것을 방지할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380a3bed0fc317dbb4005&quot;&gt;&lt;b&gt;outboundTrafficPolicy&lt;/b&gt; 를 &lt;b&gt;REGISTER_ONLY&lt;/b&gt;로 설정했을 때는 &lt;b&gt;ServiceEntry&lt;/b&gt;로 외부로 향하는 트래픽을 허용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dfb8b2c1c2380ffa08ce90cf50e2ea0&quot;&gt;&lt;b&gt;실습 후 삭제&lt;/b&gt; : &lt;b&gt;kind delete cluster --name myk8s&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. Resilience: Solving application networking challenges&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380638cc1e8f0c0cb674e&quot;&gt;&lt;b&gt;회복탄력성의 중요성 이해&lt;/b&gt; Understanding the importance of resilience&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380128d42c79882dd344c&quot;&gt;&lt;b&gt;클라이언트 측 로드 밸런싱&lt;/b&gt; 활용 Leveraging client-side load balancing&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380f6bd07e760a866f333&quot;&gt;&lt;b&gt;요청 시간 초과 및 재시도 구현&lt;/b&gt; Implementing request timeouts and retries&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23809f99bfce1260960b58&quot;&gt;&lt;b&gt;회로 차단 및 연결 풀링&lt;/b&gt; Circuit breaking and connection pooling&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23805da920d2f5696dcf6e&quot;&gt;&lt;b&gt;마이그레이션&lt;/b&gt; Migrating from application libraries used for resilience&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380679c84ee75041cd4fb&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;들어가며&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c23805bafa5fc61e63a751c&quot;&gt;4장에서 다룬 이스티오 인그레스 게이트웨이를 거쳐 클러스터 내부로 트래픽이 들어오게 되면, 트래픽을 요청 수준에서 조작할 수 있고 요청을 정확히 어디로 라우팅할지 제어할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23806cb858d1dc356f2b01&quot;&gt;앞 장에서는 가중치 라우팅, 요청 비교 기반 라우팅과 이를 통해 가능해진 릴리스 패턴 유형을 다륐다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238098a8b2d89526fc4951&quot;&gt;또한 애플리케이션 오류, 네트워크 파티션, 기타 주요 문제가 발생한 경우에 문제를 우회하는 데도 이 트래픽 제어를 사용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c238015a9dae87ecbba887b&quot;&gt;분산 시스템의 문제는 시스템이 이따금 예측할 수 없는 방식으로 실패하며 수작업으로 트래픽 전환 조치를 할 수 없다는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380d5a391f1f5d66fca7b&quot;&gt;따라서 문제가 발생했을 때 애플리케이션이 스스로 대응할 수 있도록 애플리케이션에 합리적인 동작을 구축할 수 있는 방법이 필요하다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380408425cc4daaa3aa53&quot;&gt;이스티오를 사용하면 애플리케이션 코드를 변경하지 않고도 타임아웃, 재시도, 서킷 브레이커를 추가할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380a2abf3f2fb03602beb&quot;&gt;이번 장에서는 그 방법과 나머지 시스템에 미치는 영향을 살펴본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380d5a7ebcb6594e78385&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;block-1e0b8b2c1c238086a535e5d2bb5b6509&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6.0. 실습환경 준비&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;block-1e0b8b2c1c238029b4b6d863e9136cfc&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;6.0.1. [실습 환경 구성] &lt;/b&gt;&lt;/span&gt;&lt;b&gt;k8s(1.23.17) 배포&lt;/b&gt; : NodePort(&lt;span style=&quot;color: #347da8;&quot;&gt;30000&lt;/span&gt; &lt;b&gt;HTTP&lt;/b&gt;, &lt;span style=&quot;color: #d34a45;&quot;&gt;30005&lt;/span&gt; &lt;b&gt;HTTPS&lt;/b&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380cdbca0da4b9cb19822&quot;&gt;Copy
&lt;pre class=&quot;sql&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;#
git clone https://github.com/AcornPublishing/istio-in-action
cd istio-in-action/book-source-code-master
pwd # 각자 자신의 pwd 경로
code .

# 아래 extramounts 생략 시, myk8s-control-plane 컨테이너 sh/bash 진입 후 직접 git clone 가능
kind create cluster --name myk8s --image kindest/node:v1.23.17 --config - &amp;lt;https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30007 --set env.TZ=&quot;Asia/Seoul&quot; --namespace kube-system
kubectl get deploy,pod,svc,ep -n kube-system -l app.kubernetes.io/instance=kube-ops-view

## kube-ops-view 접속 URL 확인
open &quot;http://localhost:30007/#scale=1.5&quot;
open &quot;http://localhost:30007/#scale=1.3&quot;

# (옵션) metrics-server
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm install metrics-server metrics-server/metrics-server --set 'args[0]=--kubelet-insecure-tls' -n kube-system
kubectl get all -n kube-system -l app.kubernetes.io/instance=metrics-server
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380dbb47fe21318fad556&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;6.0.2. [실습 환경 구성] &lt;/b&gt;&lt;/span&gt;&lt;b&gt;istio 1.17.8 설치&lt;/b&gt; (addon 필수,&lt;b&gt; istio-proxy log 설정&lt;/b&gt;) - &lt;a style=&quot;color: #000000;&quot; href=&quot;https://istio.io/v1.17/docs/&quot;&gt;Docs&lt;/a&gt; , &lt;a style=&quot;color: #000000;&quot; href=&quot;https://istio.io/v1.17/docs/setup/install/istioctl/&quot;&gt;Install&lt;/a&gt; , &lt;a style=&quot;color: #000000;&quot; href=&quot;https://istio.io/v1.17/docs/setup/additional-setup/config-profiles/&quot;&gt;profile&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380ccb888c07bf0a86812&quot;&gt;Copy
&lt;pre class=&quot;jboss-cli&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;# myk8s-control-plane 진입 후 설치 진행
docker exec -it myk8s-control-plane bash
-----------------------------------
# (옵션) 코드 파일들 마운트 확인
tree /istiobook/ -L 1
혹은
git clone ... /istiobook

# istioctl 설치
export ISTIOV=1.17.8
echo 'export ISTIOV=1.17.8' &amp;gt;&amp;gt; /root/.bashrc

curl -s -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIOV sh -
cp istio-$ISTIOV/bin/istioctl /usr/local/bin/istioctl
istioctl version --remote=false

# default 프로파일 컨트롤 플레인 배포
istioctl install --set profile=default -y

# 설치 확인 : istiod, istio-ingressgateway, crd 등
kubectl get istiooperators -n istio-system -o yaml
kubectl get all,svc,ep,sa,cm,secret,pdb -n istio-system
kubectl get cm -n istio-system istio -o yaml
kubectl get crd | grep istio.io | sort

# 보조 도구 설치
kubectl apply -f istio-$ISTIOV/samples/addons
kubectl get pod -n istio-system

# 빠져나오기
exit
-----------------------------------

# istio-proxy 로그 출력 설정 : configmap 에 mesh 바로 아래에 accessLogFile 부분 추가
KUBE_EDITOR=&quot;nano&quot;  kubectl edit cm -n istio-system istio
...
  mesh: |-
    accessLogFile: /dev/stdout
...

# 실습을 위한 네임스페이스 설정
kubectl create ns istioinaction
kubectl label namespace istioinaction istio-injection=enabled
kubectl get ns --show-labels

# istio-ingressgateway 서비스 : NodePort 변경 및 nodeport 지정 변경 , externalTrafficPolicy 설정 (ClientIP 수집)
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 8080, &quot;nodePort&quot;: 30000}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 443, &quot;targetPort&quot;: 8443, &quot;nodePort&quot;: 30005}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;:{&quot;externalTrafficPolicy&quot;: &quot;Local&quot;}}'
kubectl describe svc -n istio-system istio-ingressgateway

# NodePort 변경 및 nodeport 30001~30003으로 변경 : prometheus(30001), grafana(30002), kiali(30003), tracing(30004)
kubectl patch svc -n istio-system prometheus -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 9090, &quot;targetPort&quot;: 9090, &quot;nodePort&quot;: 30001}]}}'
kubectl patch svc -n istio-system grafana -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 3000, &quot;targetPort&quot;: 3000, &quot;nodePort&quot;: 30002}]}}'
kubectl patch svc -n istio-system kiali -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 20001, &quot;targetPort&quot;: 20001, &quot;nodePort&quot;: 30003}]}}'
kubectl patch svc -n istio-system tracing -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 16686, &quot;nodePort&quot;: 30004}]}}'

# Prometheus 접속 : envoy, istio 메트릭 확인
open http://127.0.0.1:30001

# Grafana 접속
open http://127.0.0.1:30002

# Kiali 접속 1 : NodePort
open http://127.0.0.1:30003

# (옵션) Kiali 접속 2 : Port forward
kubectl port-forward deployment/kiali -n istio-system 20001:20001 &amp;amp;
open http://127.0.0.1:20001

# tracing 접속 : 예거 트레이싱 대시보드
open http://127.0.0.1:30004


# 접속 테스트용 netshoot 파드 생성
cat &amp;lt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c238058a1a8c590db2cadb2&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380ca8c3ed3fefce067f4&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6.1 Building resilience into the application&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380738e36ce01baf9290b&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;6.1.0. 들어가며 : 복원력 패턴 필요&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380809d49f22187710de8&quot;&gt;마이크로서비스는 복원력을 최우선으로 고려해 구축해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238049804bc8069dd3a75a&quot;&gt;&amp;lsquo;장애가 발생하지 않도록 구축하면 된다&amp;rsquo;고 말하는 세상은 현실이 아니다. 장애가 발생하면 모든 서비스를 중단시킬 위험이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238034b878e346a9e4dab4&quot;&gt;네트워크로 통신하는 서비스로 분산 시스템을 구축할 때는 장애 지점을 더 많이 많들어낼 위험이 있으며, 치명적인 장애가 발생할 가능성을 마주하게 된다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238010b86fc87296b03746&quot;&gt;따라서 서비스 소유자는 &lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;애플리케이션 및 서비스 전반에 걸쳐 몇 가지 복원력 패턴을 일관되게 채택&lt;/b&gt;&lt;/span&gt;해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380af9d22d6c2af3b6aad&quot;&gt;그림 6.1 처럼 서비스 A가 서비스 B를 호출했는데 서비스 B의 특정 엔드포인트로 전송이된 요청에서 지연이 발생했다면, 우리는 서비스 A가 이를 사전에 식별하고 다른 엔드포인트, 다른 가용 영역, 심지어 다른 리전으로 라우팅하길 원한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238014b988ff4e05770b2e&quot;&gt;만약 서비스 B에 간간히 오류가 발생한다면 실패한 요청을 재시도할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380dcac65ebf56c9baacc&quot;&gt;마찬가지로 서비스 B를 호출하는 데 문제가 생긴다면, 그것이 무슨 문제든 서비스 B가 회복할 때까지 물러나야 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23808b8e14c6f28aa17ec4&quot;&gt;계속 서비스 B로 부하를 가한다면(경우에 따라 요청을 재시도하면서 부하가 증폭되는 경우도 있음) 서비스를 과부하 상태로 만들 위험이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380d2ae9df27c9c96aa56&quot;&gt;이런 과부하는 서비스 A와 이러한 서비스에 의존하는 모든 서비스에 파급돼 심각한 연쇄 오류를 일으킬 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380c89f2efe7a2eab7517&quot;&gt;해결책은 &lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;애플리케이션이 장애를 예상해 요청을 처리할 때 자동으로 복원을 시도하거나 대체 경로로 돌아갈 수 있도록 구축하&lt;/b&gt;&lt;/span&gt;는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23807ea3a1f78f6ff102ff&quot;&gt;예를 들어 서비스 A가 서비스 B를 호출할 때 문제가 발생한다면, &lt;b&gt;요청을 재시도&lt;/b&gt;하거나 &lt;b&gt;타임아웃&lt;/b&gt;시키거나 &lt;b&gt;서킷 브레이킹 패턴&lt;/b&gt;을 사용해 더 이상의 발신 요청을 취소할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238089a4d9c8380acc6f6c&quot;&gt;이번 장에서는 &lt;b&gt;애플리케이션의 프로그래밍 언어와 상관없이 애플리케이션에 복원력을 올바르고 일관되게 구현할&lt;/b&gt; 수 있도록, 이스티오를 사용해 이런 문제들을 투명하게 해결하는 방법을 살펴본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380868670e3f07415514b&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;6.1.1 Building resilience into application libraries&lt;/b&gt; : 언어 마다 구현 상이, 운영 부담&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c23804ba927eec9438d0fe9&quot;&gt;서비스 메시 기술이 널리 사용되기 전까지 서비스 개발자인 우리가 애플리케이션 코드에 이런 복원력 패턴을 많이 작성해야 했다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238005b17dd8bc78333299&quot;&gt;오픈소스 커뮤니티에서는 이런 문제를 해결하는 데 도움이 되는 몇 가지 프레임워크가 등장했다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23804bb707c591f3ecb704&quot;&gt;트위터는 2011년에 자사의 복원력 프레임워크 Finagle을 오픈소스화 했다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380d39ce1c2b08de6291b&quot;&gt;트위터 &lt;b&gt;Finagle&lt;/b&gt;은 &amp;lsquo;스칼라/자바/JVM&amp;rsquo; &lt;b&gt;애플리케이션 라이브러리&lt;/b&gt;로&lt;b&gt; 타임아웃, 재시도, 서킷 브레이킹&lt;/b&gt; 등 다양한 RPC &lt;b&gt;복원력 패턴&lt;/b&gt;을 구현하는 데 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380058de6e59f5082e50e&quot;&gt;얼마 지나지 않아 넷플릭스는 자사의 복원력 프레임워크 구성 요소를 오픈소스화했다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380958315ffa2be837111&quot;&gt;여기에는 &lt;b&gt;Hystrix&lt;/b&gt;와 &lt;b&gt;Ribbon&lt;/b&gt;이 포함되는데, 각기 &lt;b&gt;서킷 브레이커&lt;/b&gt;와 &lt;b&gt;클라이언트 측 로드 밸런싱&lt;/b&gt; 기능을 제공한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380c98cb0f3ad102dec3f&quot;&gt;두 라이브러리 모두 자바 커뮤니티에서 매우 인기가 많았으며, 스프링 프레임워크는 &lt;b&gt;NetfilxOSS&lt;/b&gt; 스택을 스프링 클라우드 프레임워크에 채택하기도 했다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380d498d4c0b7605a9fe7&quot;&gt;이런&lt;span style=&quot;color: #d34a45;&quot;&gt; 프레임워크의 한 가지 문제점은 언어, 프레임워크, 인프라 조합마다 구현 방식이 상이하다&lt;/span&gt;는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238040ba95d262789f0bc0&quot;&gt;트위터 &lt;b&gt;Finagle&lt;/b&gt;과 &lt;b&gt;NetfilxOSS&lt;/b&gt;는 자바 개발자에게는 훌륭하지만 Node.js, Go 언어, 파이썬 개발자는 이런 패턴의 변형을 찾거나 직접 구현해야 했다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238083ac3ee045304d3dab&quot;&gt;때에 따라서는 이런 라이브러리가 애플리케이션 코드에 침입해 네트워킹 코드가 여거저기 흩어지고 실제 비즈니스 로직을 가려버리는 상황이 발생하기도 했다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380a5a1d8d0ab126160f2&quot;&gt;나아가 &lt;span style=&quot;color: #d34a45;&quot;&gt;여러 언어와 프레임워크에 걸쳐 이런 라이브러리들을 유지 관리하는 것은 마이크로서비스 운영 측면에서 부담&lt;/span&gt;이 된다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380c59a5be8f6ea1d47b7&quot;&gt;모든 조합을 동시에 패치하고 기능을 동일하게 유지해야 하기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380b4a4c8c325e89e17c4&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;6.1.2 Using Istio to solve these problems&lt;/b&gt; : 이스티오 서비스 프록시가 복원력 기능 제공&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380868934d4deb8ad2fc4&quot;&gt;앞 장에서 봤듯이, 이스티오의 서비스 프록시는 애플리케이션 옆에 위치하며 애플리케이션을 드나드는 모든 네트워크 트래픽을 처리한다. (그림 6.2)&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380dbba78ef854ad69661&quot;&gt;&lt;b&gt;이스티오에서 서비스 프록시&lt;/b&gt;는 애플리케이션 수준 요청과 메시지(HTTP 요청 등)를 이해하므로 &lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;프록시 안에서 복원력 기능을 구현&lt;/b&gt;&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380f1b428cc958d35ec01&quot;&gt;예를 들어 서비스 호출 시 HTTP 503 오류가 발생하면 세 번까지 재시도하도록 설정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23802c9c8dc686b0b17c39&quot;&gt;재시도할 실패, 재시도 횟수, 재시도별 타임아웃을 정확히 설정할 수 있는데, 서비스 프록시가 서비스 인스턴스마다 배포되므로 애플리케이션마다 필요한 대로 재시도 동작을 세밀하게 제어할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380a39490fdf29770bf04&quot;&gt;이스티오의 다른 복원력 설정도 모두 마찬가지다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238040a734ed1fb4f55e87&quot;&gt;이스티오의 서비스 프록시는 기본적으로 다음과 같은 복원력 패턴을 구현한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380eab1dfe147f1ca36d0&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;6.1.3 Decentralized implementation of resilience&lt;/b&gt; : 복원력 패턴을 분산 구현&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c23800eb20ae7ff747678bf&quot;&gt;이스티오를 사용하면, 애플리케이션 요청이 통과하는 데이터 플레인 프록시가 애플리케이션 인스턴스와 같은 위치에 있고 중앙집중식 게이트웨이가 필요하지 않음을 알 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380fca6a5db5dd19b3b1b&quot;&gt;이런 복원력 패턴 처리를 코드에 함께 두는 애플리케이션 라이브러리를 사용하면 동일한 아키텍처를 얻는다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238039b039c69be2d6414c&quot;&gt;예전에는 이런 분산 시스템의 공통 문제 중 일부를 해결하기 위해 비싸고 변경하기 어려운 중앙집중식 하드웨어 장치와 기타 소프트웨어 미들웨어를 요청 경로에 배치헀다. (하드웨어 로드 밸런싱, 메시징 시스템, 엔터프라이즈 서비스 버스, API 관리 등).&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380b58a9bf9bc8622fcec&quot;&gt;이런 초기 구현들은 더 정적인 환경에 맞춰 만들어져서, 고도로 동적이고 탄력적인 클라우드 아키텍처와 인프라에 맞게 확장되거나 잘 대응하지 못한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238007a397fc2a0e58811a&quot;&gt;따라서 이런 일부 복원력 패턴을 해결할 때는 분산 구현을 선택해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23803bb881fc75b00422e8&quot;&gt;다음 절에서는 이스티오가 도움이 될 수 있는 복원력 패턴을 살펴볼 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23803cb677eb30380bf13a&quot;&gt;서비스 작동 방식을 좀 더 세밀하게 제어하기 위해 다른 샘플 애플리케이션 셋을 사용하는데, 이 프로젝트는 좀 더 현실적인 운영 환경에서 서비스가 어떻게 작동할 수 있는지 설명하기 위해 만든 닉 잭슨 &lt;span style=&quot;color: #787673;&quot;&gt;Nic Jackson&lt;/span&gt;의 Fake Service 라는 프로젝트다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380c79940c605a96832a6&quot;&gt;다음 예제에서는 그림 6.3과 같이 simple-web 서비스가 simple-backend 백엔드를 호출하는 것을 볼 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c23807d8bfbd93000da1865&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6.2 Client-side load balancing&lt;/b&gt; 클라이언트 측 로드 밸런싱 &lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;(실습)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;block-1e0b8b2c1c23805f9872d5ce43b1740d&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;6.2.0. 들어가며 : EDS, DestinationRule(Client LoadBalancer)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380769e5ed8dcb87d16ec&quot;&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;클라이언트 측 로드 밸런싱&lt;/b&gt;&lt;/span&gt;이란 엔드포인트 간에 요청을 최적으로 분산시키기 위해 &lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;클라이언트에게 서비스에서 사용할 수 있는 여러 엔드포인트를 알려주고&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;클라이언트가 특정 로드 밸런싱 알고리듬을 선택&lt;/b&gt;&lt;/span&gt;하게 하는 방식을 말한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238054850bff75994e6cd8&quot;&gt;이렇게 하면 병목 현상과 장애 지점을 만들 수 있는 &lt;b&gt;중앙집중식 로드 밸런싱에 의존할 필요성이 줄어&lt;/b&gt;들고, &lt;b&gt;클라이언트가 군더더기 홉을 거칠 필요 없이 특정 엔드포인트로 직접적이면서 의도적으로 요청&lt;/b&gt;을 보낼 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380b9ab47f35fdbec92ea&quot;&gt;그러므로 클라이언트와 서비스는 더 잘 확장돼 &lt;b&gt;변화하는 토폴로지에 대응&lt;/b&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238002a19cefaf073d1012&quot;&gt;이스티오는 &lt;b&gt;서비스&lt;/b&gt; 및&lt;b&gt; 엔드포인트 디스커버리&lt;/b&gt;를 사용해 그림 6.4처럼 &lt;b&gt;서비스 간 통신의 클라이언트 측 프록시에 올바른 최신 정보를 제공&lt;/b&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380a5b8b3dbd6e317bc80&quot;&gt;그러면 서비스의 개발자와 운영자는 이스티오 설정으로 &lt;b&gt;클라이언트 측 로드 밸런싱 동작을 설정&lt;/b&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23803aa162cecfdd811252&quot;&gt;서비스 운영자와 개발자는 &lt;b&gt;DestinationRule&lt;/b&gt; 리소스로 클라이언트가 어떤 &lt;b&gt;로드 밸런싱 알고리듬을 사용할지 설정&lt;/b&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380f6bc85f1cc6ae93e65&quot;&gt;이스티오의 서비스 프록시는 기반이 엔보이이므로 엔보이의 로드 밸런싱 알고리듬을 지원하며 그 중 일부는 다음과 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380869df5c43c97a3eaca&quot; style=&quot;background-color: #e6e6e5;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;text-align: center;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p id=&quot;block-1e0b8b2c1c23807980b8c83eeced9b6c&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Server&lt;/b&gt; side load balancing vs. &lt;b&gt;Client&lt;/b&gt; side load balancing 용어 정리와 비교(장/단점)를 해보시기 바랍니다.&lt;/p&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380219a34c42e97e56486&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5v9Oy/btsNAbHlKKY/ckdWUeXuYRYO3PfJG34wk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5v9Oy/btsNAbHlKKY/ckdWUeXuYRYO3PfJG34wk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5v9Oy/btsNAbHlKKY/ckdWUeXuYRYO3PfJG34wk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5v9Oy%2FbtsNAbHlKKY%2FckdWUeXuYRYO3PfJG34wk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;395&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
Server side LB&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c238060aa79c5d25e963076&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CBEvn/btsNAQpajIR/W3P9nfdzSl2sWpotjbht21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CBEvn/btsNAQpajIR/W3P9nfdzSl2sWpotjbht21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CBEvn/btsNAQpajIR/W3P9nfdzSl2sWpotjbht21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCBEvn%2FbtsNAQpajIR%2FW3P9nfdzSl2sWpotjbht21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;395&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
Client side LB&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380709dafd7717696fc50&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;6.2.1 Getting started with client-side load balancing : &lt;/b&gt;DestinationRule 실습&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380979587c1f8d2651ef0&quot;&gt;실습 전 초기화&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238004b5e5f01c53d485ff&quot;&gt;예제 서비스 2개와 gw,vs 배포&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23804fa711e3e0e83d23dd&quot;&gt;이스티오 DestinationRule 리소스로 simple-backend 서비스를 호출하는 모든 클라이언트의 로드 밸런싱을 &lt;b&gt;ROUND_ROBIN&lt;/b&gt;으로 설정하자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380139465f6b34454ac41&quot;&gt;&lt;b&gt;DestinationRule&lt;/b&gt;는 &lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;특정 목적지를 호출하는 메시 내 클라이언트들에 정책을 지정&lt;/b&gt;&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238082a50bdfe2480182fe&quot;&gt;simple-backend 용 첫 DestinationRule는 다음과 같다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380558198fbb30d6c14a5&quot;&gt;적용 및 확인해보자&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238059b47fe35eff2a72e6&quot;&gt;simple-web 과 simple-backend 간 호출이 여러 simple-backend 엔드포인트로 효과적으로 분산되는 것을 확인할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23803a90c9c94f5ca4f680&quot;&gt;우리는 simple-web 과 simple-backend 간의 클라이언트 측 로드 밸런싱을 보고 있는데, simple-web 과 함께 배포된 서비스 프록시가 모든 simple-backend 엔드포인트를 알고 있고 기본 알고리듬을 사용해 요청을 받을 엔드포인트를 결정하고 있기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380d3a248cecaf3bb57bf&quot;&gt;ROUND_ROBIN 로드 밸런싱을 사용하도록 DestinationRule 을 설정하기는 했지만, 사실 이스티오 서비스 프록시의 기본 설정도 ROUND_ROBIN 로드 밸런싱 전략을 사용하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380709991f6189727747f&quot;&gt;클라이언트 측 로드 밸런싱은 어떻게 서비스의 복원력을 기여할 수 있을까?&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380188d24cfbbacc8a939&quot;&gt;부하 생성기를 사용해 simple-backend 서비스 지연 시간을 변화시키는 어느 정도 현실적인 시나리오를 살펴보자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380b0b3f2f0766db23527&quot;&gt;그러면 이런 상황에서 어떤 이스티오의 로드 밸런싱 전략이 가장 적합한지 선택하는 데 도움이 될 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c238054943bde4c55364b90&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;6.2.2 Setting up our scenario&lt;/b&gt; : Fortio 설치&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c238016ab76f8d67a4a3087&quot;&gt;현실적인 환경에서 서비스가 요청을 처리하는 데 시간이 걸린다. &lt;b&gt;소요 시간&lt;/b&gt;은 여러 이유로 달라질 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23804da335fc2d980e329a&quot;&gt;서비스 외적인 이유도 응답 시간에 영향을 줄 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380398a63db641d5e0f97&quot;&gt;예제 서비스에서는 이를 모방하고자 응답 시간에 &lt;b&gt;지연&lt;/b&gt; &lt;span style=&quot;color: #787673;&quot;&gt;delays&lt;/span&gt; 과 &lt;b&gt;편차(변인)&lt;/b&gt; &lt;span style=&quot;color: #787673;&quot;&gt;variance&lt;/span&gt; 를 도입해본다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23801a938ddfda2f7cba95&quot;&gt;서비스를 다시 호출하고 최초 설정한 서비스 응답 시간의 차이를 관찰하자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23807abe05edfae2a0c9bc&quot;&gt;우리는 &lt;b&gt;Fortio&lt;/b&gt; 라는 &lt;b&gt;CLI 부하 생성 도구&lt;/b&gt;를 사용해 서비스를 실행하고&lt;b&gt; 클라이언트 측 로드 밸런싱의 차이를 관찰&lt;/b&gt;할 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c23806bbe47fec458109a8f&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;6.2.3 Testing various client-side load-balancing strategies*&lt;/b&gt;&lt;/span&gt; : LB 알고리즘에 따란 지연 시간 성능 측정&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380bb95f4ef32469a764c&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트 환경&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;block-1e0b8b2c1c238024aa65c343c68b7624&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;761&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTPwjP/btsNAdypxY3/YkHZqkTFwnYh5sxZT45YjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTPwjP/btsNAdypxY3/YkHZqkTFwnYh5sxZT45YjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTPwjP/btsNAdypxY3/YkHZqkTFwnYh5sxZT45YjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTPwjP%2FbtsNAdypxY3%2FYkHZqkTFwnYh5sxZT45YjK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;912&quot; height=&quot;542.6777&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;761&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c238010bd1edc2703bdbe81&quot;&gt;이제 Fortio 로드 테스트 클라이언트를 사용할 준비가 됐으므로 사용 사례를 살펴보자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23804e8ebecf49e096bd35&quot;&gt;Fortio를 사용해서 &lt;b&gt;60초&lt;/b&gt; 동안&lt;b&gt; 10개의 커넥션&lt;/b&gt;을 통해 &lt;b&gt;초당 1000개의 요청&lt;/b&gt;을 보낼 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380d3af28fad1a2f15ac1&quot;&gt;Fortio는 각 호출의 지연 시간을 추적하고 지연 시간 백분위수 분석과 함께 히스토그램에 표시한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380ccba4fcde46563dda0&quot;&gt;테스트를 하기 전에 지연 시간을 1초까지 늘린 simple-backend-1 서비스를 도입할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238056a2c9e12e40b91a54&quot;&gt;이는 엔드포인트 중 하나에 긴 가비지 컬렉션 이벤트 또는 기타 애플리케이션 지연 시간이 발생한 상황을 시뮬레이션한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380ed97b7f5b9ce54162a&quot;&gt;우리는 로드 밸런싱 전략을 라운드 로빈, 랜덤, 최소 커넥션으로 바꿔가면서 차이점을 관찰할 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c23805eb1a8f4c7ea6be18f&quot;&gt;지연된 simple-backend-1 서비스를 배포해보자 : fake-service - &lt;a style=&quot;color: #000000;&quot; href=&quot;https://hub.docker.com/r/nicholasjackson/fake-service&quot;&gt;Dockerhub&lt;/a&gt; , &lt;a style=&quot;color: #000000;&quot; href=&quot;https://github.com/nicholasjackson/fake-service&quot;&gt;Github&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380ceaea7f753511b5f14&quot;&gt;Fortio 를 서버 모드로 실행 후 웹 대시보드에 접근하자. fortio server&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23800aafafe78c5ff3c21d&quot;&gt;웹 대시보드에서는 테스트에 인자를 입력하고, 테스트를 실행하고, 결과를 시각화 할 수 있다. &lt;a style=&quot;color: #000000;&quot; href=&quot;http://127.0.0.1:8080/fortio/&quot;&gt;http://127.0.0.1:8080/fortio/&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380ac9778f85ef00fd681&quot;&gt;테스트가 완료되면 결과 파일이 파일시스템이 저장된다. 또한 결과 그래프도 표시된다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380e6b9a5e7522614398a&quot;&gt;로드 밸런싱 알고리듬을 &lt;b&gt;RANDOM&lt;/b&gt; 으로 변경하고 다시 로드 테스트를 해보자&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380abbfeee9e102b98634&quot;&gt;로드 밸런싱 알고리듬을 &lt;b&gt;Least connection&lt;/b&gt; 으로 변경하고 다시 로드 테스트를 해보자&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23801db46cfb015b22d76d&quot;&gt;실습 완료 후&lt;b&gt; Ctrl+C&lt;/b&gt;로 &lt;b&gt;Fortio 서버를 종료&lt;/b&gt;하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c23802ea62dc94c70cfc6b7&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;6.2.4 Understanding the different load-balancing algorithms&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380678a79fe21d9be78d7&quot;&gt;로드 테스트 종합해보면,&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238099b36ccc02628029df&quot;&gt;라운드 로빈과 랜덤 모두 간단한 로드 밸런싱 알고리듬이다. 따라서 구현하기도 이해하기도 쉽다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238057ae2ffc5d90a2556c&quot;&gt;라운드 로빈(또는 &lt;span style=&quot;color: #787673;&quot;&gt;next-in-loop&lt;/span&gt;)은 엔드포인트에 차례대로 요청을 전달한다. 랜덤은 엔드포인트를 무작위로 균일하게 고른다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238092be95ed7c66b30ba3&quot;&gt;둘 다 비슷한 분포를 기대할 수 있는데, 이 두 전략의 과제는 로드 밸런서 풀의 엔드포인트가 일반적으로 균일하지 않다는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380ecbc85c18059adaf80&quot;&gt;서비스의 리소스가 동일하더라도 그렇다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380689606d2172d8ab42e&quot;&gt;테스트에서 시뮬레이션했던 것처럼, 엔드포인트에는 지연 시간을 늘리는 가비지 컬렉션이나 리소스 경합이 일어날 수 있고 라운드 로빈과 랜덤은 런타임 동작을 고려하지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380388051dfe1981b18e4&quot;&gt;최소 커넥션 &lt;span style=&quot;color: #787673;&quot;&gt;least-connection&lt;/span&gt; 로드 밸런서(&lt;b&gt;엔보이에서는 최소 요청 &lt;/b&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;least request&lt;/b&gt;&lt;/span&gt;&lt;b&gt;으로 구현&lt;/b&gt;)는 특정 엔드포인트의 지연 시간을 고려한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380c99a55f884705d01ea&quot;&gt;요청을 엔드포인트로 보낼 때 대기열 깊이 queue depth 를 살펴 활성 요청 개수를 파악하고, 활성 요청이 가장 적은 엔드포인트를 고른다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238047bce5f307cd76a1df&quot;&gt;이런 알고리듬 유형을 사용하면, 형편없이 동작하는 엔드포인트로 요청을 보내는 것을 피하고 좀 더 빠르게 응답하는 엔드포인트를 선호할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e0b8b2c1c238091b78ae377cf5b23a7&quot; style=&quot;background-color: #e6e6e5;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;text-align: center;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p id=&quot;block-1e0b8b2c1c2380b7b328d8ee409082bd&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;엔보이&lt;/b&gt; &lt;b&gt;최소 요청&lt;/b&gt; 로드 밸런싱 &lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;Envoy least-request&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; load balancing - &lt;/span&gt;&lt;b&gt;이스티오&lt;/b&gt; 설정에서&lt;b&gt; 최소 요청&lt;/b&gt; 로드 밸런싱&lt;b&gt; &lt;/b&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;least-request&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; load balancing&lt;/span&gt; 을 &lt;b&gt;LEAST_CONN&lt;/b&gt;이라고 지칭하지만, 엔보이가 엔드포인트마다 파악하는 것은 &lt;b&gt;요청 깊이&lt;/b&gt;지 &lt;b&gt;커넥션이 아니다&lt;/b&gt;. &lt;span style=&quot;color: #787673;&quot;&gt;Envoy is tracking &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;request depths &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;for endpoints,&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt; not connections&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;- 로드 밸런서는 무작위 엔드포인트를 둘 고르고, 어떤 엔드포인트에 활성 요청이 더 적은지 확인하고, 더 적은 것을 고른다. &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;The load balancer picks two random endpoints, checks which has the fewest active requests, and chooses the one with the fewest active requests.&lt;/b&gt;&lt;/span&gt; - 연속적인 로드 밸런싱 시도에서도 마찬가지로 동작한다. &lt;span style=&quot;color: #787673;&quot;&gt;It does the same thing for successive load-balancing tries&lt;/span&gt; - 이런 방식을 &amp;lsquo;두 가지 선택의 힘(power of two choices)&amp;rsquo; 이라고 한다. &lt;span style=&quot;color: #787673;&quot;&gt;This is known as the power of two choices&lt;/span&gt; - 로그 밸런서를 이렇게 구현하는 것이 전체를 확인하는 것에 비해 좋은 타협점이라고 알려져 있으며 좋은 결과를 보인다. &lt;span style=&quot;color: #787673;&quot;&gt;it has been shown to be a good trade-off (versus a full scan) when implementing a load balancer like this, and it achieves good results&lt;/span&gt; - 이 로드 밸런서에 대한 자세한 정보는 엔보이 문서를 참고하자. - &lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/load_balancers#weighted-least-request&quot;&gt;Docs&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380d8a485ff473494ee3a&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6.3 Locality-aware load balancing &lt;/b&gt;지역 인식 로드 밸런싱 &lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;(실습)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;block-1e0b8b2c1c23801fa696fb03e74dea12&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;6.3.0. 들어가며 : 배경 소개&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380f9ba42e7daca9dcb55&quot;&gt;이스티오 같은 컨트롤 플레인의 역할 중 하나는 서비스 토폴로지를 이해하고 그 토폴로지가 어떻게 발전할 수 있는지 파악하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380b08c06c25b65987031&quot;&gt;&lt;b&gt;서비스 메시&lt;/b&gt;에서&lt;b&gt; 전체 서비스 토폴로지를 이해&lt;/b&gt;할 때의 이점은 서비스와 피어 서비스의 위치 같은 휴리스틱 &lt;span style=&quot;color: #787673;&quot;&gt;heuristic&lt;/span&gt; 을 바탕으로 &lt;b&gt;라우팅과 로드 밸런싱을 자동으로 결정&lt;/b&gt;할 수 있다는 점이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380bcbb5ec6c06e3dee4e&quot;&gt;이스티오가 지원하는 로드 밸런싱 유형에는 &lt;b&gt;워크로드의 위치에 따라 루트에 가중치를 부여하고 라우팅 결정&lt;/b&gt;을 내리는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238004a4e2ecf6750ed1f6&quot;&gt;예를 들어 이스티오는 특정 서비스를 배포한 리전과 가용 영역을 식별하고, &lt;b&gt;더 가까운 서비스에 우선순위를 부여&lt;/b&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23804e9f26e07ee7e54600&quot;&gt;만약 simple-backend 서비스를 여러 리전에 배포했다면(us-west, us-east, europe-west), 호출하는 방법은 여러 가지가 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380928f55e6f18014dfce&quot;&gt;simple-web을 us-west 리전에 배포했다면, 우리는 simple-web이 하는 simple-backend 호출이 us-west 로컬이길 바랄 것이다. (그림 참고)&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238002b769f66f4d802d4c&quot;&gt;&lt;span style=&quot;color: #d34a45;&quot;&gt;&lt;b&gt;모든 엔드포인트를 동등하게 취급&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #d34a45;&quot;&gt;한다면 리전이나 영역을 넘나들면서&lt;/span&gt;&lt;span style=&quot;color: #d34a45;&quot;&gt;&lt;b&gt; 지연 시간이 길어지고 비용이 발생할 가능성이 크다&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #d34a45;&quot;&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c238035a5cac7a75564b4c1&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;6.3.1 Hands-on with locality load balancing*&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380e798d3f9b0e8c45aa0&quot;&gt;지역 인식 로드 밸성싱이 잘 동작하는지 살펴보자. 쿠버네티스에 배포할 때, 리전과 영역 정보를 노드 레이블에 추가할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238045bb79f5323cf1eab7&quot;&gt;예를 들어 failure-domain.beta.kubernetes.io/region 레이블 및 failure-domain.beta.kubernetes.io/zone 은 각각 리전과 영역을 지정 할 수 있게 해준다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380cfa85cd51b121d3778&quot;&gt;최근에는 쿠버네티스 API 정식 버전에서는 이 레이블들을 topology.kubernetes.io/region 과 topology.kubernetes.io/zone 으로 대체했다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238089b731edd65f4601cc&quot;&gt;이런 레이블은 구글 클라우드나 AWS 같은 클라우드 프로바이더가 자동으로 추가하는 경우가 많다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23805c90cdf733d199ed31&quot;&gt;이스티오는 이런 노드 레이블을 가져와 엔보이 로드 밸런싱 엔드포인트에 지역 정보로 보강한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380e883b8d459864ebe52&quot;&gt;현재 노드 1대(?)로 실습 하고 있으니, 다른 방식으로 지역 노드(?)로 실습을 하자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23800ab926f98a7697fdb5&quot;&gt;이스티오에는 워크로드에 지역을 명시적으로 설정할 수 있는 방법이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238064bb36ff45d8a62644&quot;&gt;파드에 istio-locality 라는 레이블을 달아 리전/영역을 지정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380959b57e9bf83af50c3&quot;&gt;이러면 지역 인식 라우팅 및 로드 밸런싱을 시연하기에 충분하다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23807fa6d9ee0dc1b53c3d&quot;&gt;예를 들어 simple-web 디플로이먼트는 다음과 같을 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238031b54edac4e0897be5&quot;&gt;simple-backend 서비스를 배포할 때 지역 레이블을 다양하게 지정할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238089a9c9fb2d450ea000&quot;&gt;simple-web과 같은 지역인 us-west1-a 에 simple-backend-1을 배포한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238099a23dd6aff0ffa1e3&quot;&gt;그리고 us-west1-b 에 simple-backend-2 를 배포한다. 이 경우, 리전은 동일하지만 영역이 다르다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380d6ac7bf2d3f90df074&quot;&gt;지역 간에 로드 밸런싱을 수행할 수 있는 이스티오의 기능에는 리전, 영역, 심지어는 더 세밀한 하위 영역 &lt;span style=&quot;color: #787673;&quot;&gt;subzone&lt;/span&gt; 도 포함된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c23801e8090cd9ac474774e&quot;&gt;다음 서비스를 배포하자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238013beb5e2dd6e183b11&quot;&gt;이스티오의 지역 인식 로드 밸런싱은 기본적으로 활성화돼 있다. &lt;a href=&quot;https://istio.io/v1.17/docs/reference/config/istio.mesh.v1alpha1/&quot;&gt;https://istio.io/v1.17/docs/reference/config/istio.mesh.v1alpha1/&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380e196c3d3f95abf1808&quot;&gt;&lt;b&gt;비활성화&lt;/b&gt; 하고 싶다면, meshConfig.localityLbSetting.enabled: false 로 설정하면 된다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238087b335c50bce05a101&quot;&gt;책 저자가 추천하는 이스티오의 지역 인식 로드 밸런싱 블로깅 &lt;a href=&quot;https://karlstoney.com/locality-aware-routing/&quot;&gt;https://karlstoney.com/locality-aware-routing/&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238074a569d0e96e8bdaac&quot;&gt;지역 정보가 준비되면, us-west1-a 에 있는 simple-web 호출이 같은 영역인 us-west1-a 에 배포된 simple-backend 서비스로 갈 것으로 기대할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380ff968bf91018bd582c&quot;&gt;우린 예제에서는 simple-web의 모든 트래픽이 us-west1-a 에 있는 simple-backend-1 로 향한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380a6add5c641345626af&quot;&gt;simple-backend-2 서비스는 simple-web 과 다른 영역인 us-west-1b에 배포돼 있으므로, us-west1-a 에 있는 서비스가 실패하기 시작할 때만 simple-backend-2 로 향할 것으로 기대할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c23805a86fed03861cd7abc&quot;&gt;&lt;b&gt;호출 테스트 1&lt;/b&gt; &amp;rArr; &lt;b&gt;지역 정보를 고려하지 않고 simple-backend 모든 엔드포인트로 트래픽이 로드 밸런싱 됨, 아직 지역 기반 load balancing 적용이안됨&lt;/b&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380cd8932d18f63eceef6&quot;&gt;이스티오에서 &lt;b&gt;지역 인식 로드밸런싱이 작동&lt;/b&gt;하려면 &lt;b&gt;헬스 체크를 설정&lt;/b&gt;해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23808a8cc8d821fa54d015&quot;&gt;헬스 체크가 없으면 이스티오가 로드 밸런싱 풀의 어느 엔드포인트가 비정상 인지, 다음 지역으로 넘기는 판단 기준은 무엇인지를 알 수 없다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380daadd3d6c1ca96805d&quot;&gt;이상값 감지는 엔드포인트의 동작과, 엔드포인트가 정상적으로 보이는지 여부를 수동적으로 감시한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23807f9a0fd2f40b218374&quot;&gt;엔드포인트가 오류를 반환하는지 지켜보다가, 오류가 반환되면 엔드포인트를 비정상으로 표시한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380918dfaca07fef66c1e&quot;&gt;이상값 감지는 다음 절에서 더 자세히 다룬다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c23800d94d4cb606385b180&quot;&gt;simple-backend 서비스에 이상값 감지를 설정해 수동적인 헬스 체크 설정을 추가해보자. 아래는 설정값에 대한 자세한 설명이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e0b8b2c1c238005a6faf5bfac8e3e70&quot;&gt;Copy
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #000000; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;#
cat ch6/simple-backend-dr-outlier.yaml
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: simple-backend-dr
spec:
  host: simple-backend.istioinaction.svc.cluster.local
  trafficPolicy:
    outlierDetection:             # 이상값 감지 설정
      consecutive5xxErrors: 1     # 5xx error가 연속 1개 있으면 unhealthy
      interval: 5s                # 5초 간격으로 요청
      baseEjectionTime: 30s       # 30초 동안 트래픽에서 제외
      maxEjectionPercent: 100     # 100%는 모든 인스턴스가 비정상으로 간주될 경우 전부 제외될 수 있음

kubectl apply -f ch6/simple-backend-dr-outlier.yaml -n istioinaction

# 확인
kubectl get dr -n istioinaction simple-backend-dr -o jsonpath='{.spec}' | jq


# 반복 호출 확인 : 파드 비중 확인
for in in {1..10}; do curl -s http://simple-web.istioinaction.io:30000 | jq &quot;.upstream_calls[0].body&quot;; done
for in in {1..50}; do curl -s http://simple-web.istioinaction.io:30000 | jq &quot;.upstream_calls[0].body&quot;; done | sort | uniq -c | sort -nr


# proxy-config : simple-web 에서 simple-backend 정보 확인
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/simple-web.istioinaction --fqdn simple-backend.istioinaction.svc.cluster.local        
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/simple-web.istioinaction --fqdn simple-backend.istioinaction.svc.cluster.local -o json
...
        },
        &quot;outlierDetection&quot;: {
            &quot;consecutive5xx&quot;: 1,
            &quot;interval&quot;: &quot;5s&quot;,
            &quot;baseEjectionTime&quot;: &quot;30s&quot;,
            &quot;maxEjectionPercent&quot;: 100,
            &quot;enforcingConsecutive5xx&quot;: 100,
            &quot;enforcingSuccessRate&quot;: 0
        },
...

docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/simple-web.istioinaction --cluster 'outbound|80||simple-backend.istioinaction.svc.cluster.local'
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/simple-web.istioinaction --cluster 'outbound|80||simple-backend.istioinaction.svc.cluster.local' -o json
...
                &quot;healthStatus&quot;: {
                    &quot;edsHealthStatus&quot;: &quot;HEALTHY&quot;
                },
                &quot;weight&quot;: 1,
                &quot;priority&quot;: 1,
                &quot;locality&quot;: {
                    &quot;region&quot;: &quot;us-west1&quot;,
                    &quot;zone&quot;: &quot;us-west1-b&quot;
                }
            
...

# 로그 확인
kubectl logs -n istioinaction -l app=simple-backend -c istio-proxy -f

kubectl stern -l app=simple-backend -n istioinaction
simple-backend-1-687cff7785-2qrbw istio-proxy [2025-04-25T16:07:56.973Z] &quot;GET // HTTP/1.1&quot; 301 - via_upstream - &quot;-&quot; 0 36 1 0 &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;7f8ee51b-0da7-4289-8a06-85522dc4bac7&quot; &quot;simple-backend:80&quot; &quot;10.10.0.20:8080&quot; inbound|8080|| 127.0.0.6:56199 10.10.0.20:8080 192.168.65.1:0 outbound_.80_._.simple-backend.istioinaction.svc.cluster.local default
simple-backend-1-687cff7785-2qrbw istio-proxy [2025-04-25T16:07:56.977Z] &quot;GET / HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 277 152 152 &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;7f8ee51b-0da7-4289-8a06-85522dc4bac7&quot; &quot;simple-backend:80&quot; &quot;10.10.0.20:8080&quot; inbound|8080|| 127.0.0.6:40131 10.10.0.20:8080 192.168.65.1:0 outbound_.80_._.simple-backend.istioinaction.svc.cluster.local default
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c238005b853e1577b1fa8f3&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IPnC6/btsNBK9z9IG/fQ8MflmtXMPhADEKKAy3e0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IPnC6/btsNBK9z9IG/fQ8MflmtXMPhADEKKAy3e0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IPnC6/btsNBK9z9IG/fQ8MflmtXMPhADEKKAy3e0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIPnC6%2FbtsNBK9z9IG%2FfQ8MflmtXMPhADEKKAy3e0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;816&quot; height=&quot;182.40813&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380ecb759cafbda0fdcb0&quot;&gt;모든 트래픽이 simple-web과 동일한 영역에 있는 simple-backend-1 서비스로 가고 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380e3920fe5ad584f32e9&quot;&gt;&lt;b&gt;호출 테스트 2&lt;/b&gt; &amp;rArr; 오동작 주입 후 확인&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238031a7a3ca468ac565a0&quot;&gt;다음 실습을 위해 simple-backend-1 을 정상화&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c238049af36f13393d495e9&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;6.3.2 More control over locality load balancing with weighted distribution&lt;/b&gt; : &lt;b&gt;가중치&lt;/b&gt; 분포로 지역 인식 LB 제어 강화&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380d5845fc9d77ed47b26&quot;&gt;앞 절에서는 지역 인식 로드 밸런싱이 실제로 작동하는 모습을 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380568947f06168cbaf8c&quot;&gt;지역 인식 로드밸런싱에서 마지막으로 알아둬야 하는 내용은 동작 방식 일부를 제어할 수 있다는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380f0b104eba3ba027580&quot;&gt;이스티오의 기본 설정에서 서비스 프록시는 모든 트래픽을 동일 지역의 서비스로 보내고, 장애나 비정상 엔드포인트가 있을 때만 다른 지역으로 넘긴다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380aeaf0af6640522efa7&quot;&gt;하지만 트래픽 일부를 여러 지역에 분산하고 싶다면 이 동작에 영향을 줄 수 있는데, 이를 지역 가중 분포 &lt;span style=&quot;color: #787673;&quot;&gt;locality weighted distribution&lt;/span&gt; 라고 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238062a62ac9252ba1f4d1&quot;&gt;특정 지역의 서비스가 피크 &lt;span style=&quot;color: #787673;&quot;&gt;peak&lt;/span&gt; 시간이나 계절성 트래픽으로 인해 과부하될 것으로 예상될 경우 이런 방법을 사용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380dba3eef292e683040a&quot;&gt;특정 영역에서 리전이 처리 할 수 없는 부하가 들어온다고 해보자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380d18bebc5bceee469c6&quot;&gt;트래픽의 70%가 최인접 지역으로 가고, 30%가 인접 지역으로 가길 원한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23805daa8cf0b8eba28112&quot;&gt;앞선 예제를 따라 simple-backend 서비스로 가는 트래픽 70%를 us-west1-a로, 30%를 us-west1-b로 보낼 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c238008bf49e51ba000db30&quot;&gt;실습해보자 : lb에 가중치 적용하기!&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380daa1a7d51ab79ba646&quot;&gt;일부 요청이 분산됐다. 대부분은 가장 가까운 지역으로 향했지만, 다음 최인접 지역으로 넘어갈 수 있는 여지는 있었다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238035bed7fa40a73b12fc&quot;&gt;이는 5장에서 트래픽을 명시적으로 제어했던 것과 동일하지 않다는 점에 유의하자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238002ad79c21b36983777&quot;&gt;트래픽 라우팅에서는 서비스의 부분집합 간에 트래픽 비중을 제어할 수 있었고, 보통 전체 서비스 그룹 내에서 종류나 버전이 여럿일 때 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23809a8cdaf7c1fa0d2679&quot;&gt;위 예제에서는 서비스의 배포 토폴로지를 바탕으로 트래픽에 가중치를 부여했고, 부분집합과는 무관한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23807fb65dcf03c061f23f&quot;&gt;부분집합 라우팅과 가중치 부여는 상호 배타적인 개념이 아니다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23808ba0d0ee8c378cd944&quot;&gt;이 둘은 중첩될 수 있으며, 5장에서 봤던 세밀한 트래픽 제어 및 라우팅을 이번 절에서 살펴본 지역 인식 로드 밸런서 위에 적용 할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c23804d855eefed84bd3d83&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6.4 Transparent timeouts and retries &lt;/b&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;(실습)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380ae99dbf4ea956acfce&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;6.4.0. 들어가며 : 네트워크 신뢰성 문제 극복 필요 &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c23809bbcf0c31dd9532459&quot;&gt;네트워크에 분산된 구성 요소에 의존하는 시스템을 구축할 때 가장 큰 문제는 &lt;b&gt;지연 시간&lt;/b&gt;과 &lt;b&gt;실패&lt;/b&gt;다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380e3a722d8720286e991&quot;&gt;앞선 절에서는 이스티오에서 로드 밸런싱과 지역을 사용해 이런 문제를 완화하는 방법을 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380c8a594e2f618cdcef1&quot;&gt;이 네트워크 호출이 너무 길면 어떻게 되는가?&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380fcb4ffe77a6fbc9ede&quot;&gt;또는 지연 시간이나 다른 네트워크 요인 때문에 간간이 실패한다면?&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23804e95a6fd64072e008d&quot;&gt;이스티오는 이런 문제를 해결하는 데 어떻게 도움이 될 수 있을까?&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23806d99a5ffb6c3d82c3e&quot;&gt;이스티오를 사용하면 다양한 종류의 타임아웃과 재시도를 설정해 &lt;b&gt;네트워크에 내재된 신뢰성 문제&lt;/b&gt;를 극복할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c23809db9c2d3eeed810b68&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;6.4.1 Timeouts&lt;/b&gt; : 지연 시간&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380e7b253f4198c23b4b9&quot;&gt;분산 환경에서 가장 다루기 어려운 시나리오 중 하나가 &lt;b&gt;지연 시간&lt;/b&gt;이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238076873cdbbfc5d9acbe&quot;&gt;처리 속도가 느려지면 리소스를 오래 들고 있을 테고, 서비스에서는 처리해야 할 작업이 적체될 수 있으며, 상황은 연쇄 장애로까지 이어질 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380fcb952ec33141a3f33&quot;&gt;이런 예기치 못한 시나리오를 방지하려면 커넥션이나 요청, 혹은 둘 다에서 타임아웃을 구현해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380b59dc7e42991529eb2&quot;&gt;중요한 점은 서비스 호출 사이의 타임아웃이 서로 상호작용하는 방법이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238020b70ff39d5f6a0e1d&quot;&gt;예를 들어 서비스 A가 서비스 B를 호출할 때 타임아웃은 1초이지만 서비스 B가 서비스 C를 호출할 때 타임이웃은 2초라면, 어떤 타임아웃이 먼저 작동하는가?&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238026a50ecdca8d1a2fc3&quot;&gt;가장 제한적인 타임아웃이 먼저 동작하므로, 서비스 B에서 서비스 C로의 타임아웃은 발동하지 않을 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380eeb9dee71de3d994cf&quot;&gt;일반적으로 아키텍처의 가장자리(트래픽이 들어오는 곳)에 가까울수록 타임아웃이 길고 호출 그래프의 계층이 깊을수록 타임아웃이 짧은(혹은 더 제한적인)것이 합리적이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238003bba7cb18d48fb25c&quot;&gt;어떻게 이스티오를 사용해 타임아웃 정책을 제어하는지 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c238021a530f99f41077f76&quot;&gt;환경을 재설정하자&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380f49f0bfbbd0a5337cd&quot;&gt;호출 테스트 : &lt;b&gt;simple-backend-1&lt;/b&gt;를&lt;b&gt; 1초 delay로 응답&lt;/b&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23800bae88f929a1aded34&quot;&gt;1초 정도는 괜찮을 수 있지만, simple-backend의 지연 시간이 5초, 혹은 100초로 급증한다면 어떻게 될까?&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238007bb80c0c2ff56c969&quot;&gt;이스티오를 사용해 simple-backend 서비스 호출에 타임아웃을 적용해보자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23800b826dc3a825a80e88&quot;&gt;이스티오는 VirtualService 리소스로 요청별로 타임아웃을 지정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23800f8727f90a2c3eb4e9&quot;&gt;예를 들어 &lt;b&gt;메시 내 클라이언트&lt;/b&gt;에서&lt;b&gt; simple-backend&lt;/b&gt; 로 향하는 &lt;b&gt;호출의 타임아웃을 0.5초로 지정&lt;/b&gt;하려면 다음과 같이 하면 된다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238049ab24e3b4b85340f8&quot;&gt;다음 절에서 타임아웃 같은 실패를 해결하기 위한 다른 방법을 논의한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c23800db58fced78b073a99&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;6.4.2 Retries*&lt;/b&gt;&lt;/span&gt; : 재시도&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380e69f62c80d66ce0566&quot;&gt;설정 초기화&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23807db492cfd7b83281c4&quot;&gt;서비스를 호출할 때 간간이 네트워크 실패를 겪는다면, 애플리케이션이 요청을 재시도하길 원할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23805fa871e7df2c8f8fc7&quot;&gt;요청을 재시도하지 않으면, 서비스가 흔히 발새하고 예견할 수 있는 실패에 취약해져 사용자에게 좋지 않은 경험을 제공할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380c68d57e3ad48e790e9&quot;&gt;한편으로 무분별한 재시도는 연쇄 장애를 야기하는 등 시스템 상태를 저하시킬 수 있으므로 적절히 균형을 맞춰야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23803fbb61cf17579c9f1e&quot;&gt;서비스가 실제로 과부화된 경우에는 재시도해봐야 문제가 악화시킬 뿐이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23806a8712c9d1f2d8cfd3&quot;&gt;이스티오의 재시도 옵션을 살펴보자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238020b2bcc5b57f80b3ba&quot;&gt;이스티오에서는 &lt;b&gt;재시도가 기본적으로 활성화&lt;/b&gt;돼 있고,&lt;b&gt; 두 번까지 재시도&lt;/b&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380e18815df5a5732976d&quot;&gt;동작을 세밀하게 튜닝하기에 앞서 기본 동작을 이해해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380adafc9e64873f3ea03&quot;&gt;시작하기 위해 예제 애플리케이션에서 기본적인 재시도를 비활성화하자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23807c9bcce4772cb196ea&quot;&gt;VirtualService 리소스에서 최대 재시도를 0으로 설정하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1e0b8b2c1c238000a09ecc8b0ca82eaa&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;u&gt;에러 발생 시 재시도 실습&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c238007b842c157ace9eb0d&quot;&gt;이제 주기적으로(75%) 실패하는 simple-backend 서비스 버전을 배포해보자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380f6b5faf888b50182cd&quot;&gt;이 경우 엔드포인트 셋 중 하나(simple-backend-1)는 그림 6.12처럼 호출 중 75%에 HTTP 503 반환한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238050966cc42b7edaa288&quot;&gt;기본적으로, 이스티오는 &lt;b&gt;호출이 실패하면 두 번 더 시도&lt;/b&gt;한다. 이 &lt;b&gt;기본 재시도는 특정 상황에서만 적용&lt;/b&gt;된다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23807cb2cad78c3c00f59e&quot;&gt;일반적으로는 &lt;b&gt;이들 기본 상황에서는 재시도해도 안전한다.&lt;/b&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380139787c5a26e061b4e&quot;&gt;이 상황들은 네트워크 커넥션이 수립되지 않아 첫 시도에서 요청이 전송될 수 없음을 의미하기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238016b5fce514785ff2b7&quot;&gt;우리는 앞서 살펴본 설정으로 &lt;b&gt;기본 재시도 정책을 비활성화&lt;/b&gt;했다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23809caee2fb6d584e83e5&quot;&gt;다음 VirtualService 리소스를 사용해 simple-backend 로 향하는 호출에 재시도를 2회로 명시적으로 설정해보자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380b2b792f3009d9f5090&quot;&gt;앞에서 봤듯이, &lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;실패는 있지만 호출자에게는 드러나지 않는다. &lt;/b&gt;&lt;/span&gt;이스티오의 재시도 정책을 활성화해 이런 오류를 우회하게끔 했기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23802ab59ccba1ba98b1bf&quot;&gt;HTTP 503은 기본적으로 재시도할 수 있는 상태 코드 중 하나다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380b88a26e82167cf05e1&quot;&gt;다음 VirtualService 재시도 정책은 설정할 수 있는 재시도 파라미터를 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380bf98ced7cf8b6e2cc8&quot;&gt;다양한 재시도 설정으로 재시도 동작(얼마나 많이, 얼마나 깊게, 어느 엔드포인트로 재시도할 지)과 어떤 상태 코드일 때 재시도할지를 어느 정도 제어할 수 있다. 상술했듯이 모든 요청을 재시도할 수 있거나 해야 하는 것은 아니다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380a69cdbc6db601d52fe&quot;&gt;예를 들어 &lt;b&gt;HTTP 500 코드를 반환&lt;/b&gt;하는 simple-backend 서비스를 배포하면, &lt;b&gt;기본 재시도 동작은 실패를 잡아내지 않는다.&lt;/b&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238083a3bdec2f0ecd2886&quot;&gt;&lt;b&gt;503 이외의 다른 에러 발생 시에도 retry 가 동작&lt;/b&gt;하는지 확인해보자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380eca696fd910210cf1c&quot;&gt;HTTP 500은 재시도하는 상태 코드에 포함되지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380058a1de4c41f423788&quot;&gt;모든 HTTP 500 코드(커넥션 수립 실패 및 스트림 거부 포함)를 재시도하는 VirtualService 재시도 정책을 사용해보자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238039bbafe052119b4c15&quot;&gt;사용할 수 있는 &lt;b&gt;retryOn&lt;/b&gt; 설정은 엔보이 문서를 참조하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e0b8b2c1c238057bf23f44eb7795ae7&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;u&gt;타임아웃에 따른 재시도&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380959c10c879d28a79a8&quot;&gt;각&lt;b&gt; 재시도&lt;/b&gt;에는 자체적인 &lt;b&gt;제한 시간&lt;/b&gt;(&lt;span style=&quot;color: #787673;&quot;&gt;perTryTimeout&lt;/span&gt;) 이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380879adceb8ecc748d0a&quot;&gt;이 설정에서 주의할 점은 &lt;span style=&quot;color: #787673;&quot;&gt;perTryTimeout&lt;/span&gt;에 &lt;b&gt;총 시도 횟수&lt;/b&gt;를 &lt;b&gt;곱한 값&lt;/b&gt;이&lt;b&gt; 전체 요청 제한 시간&lt;/b&gt;(= app에 설정된 timeout)보다 &lt;b&gt;작아야 한다&lt;/b&gt;는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380d59742df106d9566ad&quot;&gt;예를 들어, &lt;b&gt;총 제한 시간이 1초&lt;/b&gt;이고 &lt;b&gt;시도별 제한 시간이 500ms에 3회까지 재시도&lt;/b&gt;하는&lt;b&gt; 재시도 정책은 의도대로 동작하지 않는&lt;/b&gt;다. &amp;rarr; 2번까지 재시도 하거나 2번째 재시도도 못할 수 있음(backoff 지연에 의해)&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23805cadbeec274c95191d&quot;&gt;&lt;span style=&quot;color: #d34a45;&quot;&gt;재시도를 하기 전에 전체 요청 타임아웃이 발생&lt;/span&gt;할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380cca554e3a551a076ae&quot;&gt;또 재시도 사이에는 &lt;b&gt;백오프&lt;/b&gt; &lt;span style=&quot;color: #787673;&quot;&gt;backoff&lt;/span&gt; &lt;b&gt;지연&lt;/b&gt;이 있다는 점도 유념하자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23807ca88aec0cbd196e3c&quot;&gt;이 백오프 시간도 전체 요청 제한 시간 계산에 포함된다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23808195f8ccf98c99df6e&quot;&gt;백오프는 다음 절에서 더 자세히 다룬다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c23808b8656dedd38ea557f&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;u&gt;작동 방식&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380e189f8f4d0e2dd1dea&quot;&gt;요청이 이스티오 서비스를 서비스 프록시를 거쳐 흐를 때, &lt;b&gt;업스트림으로 전달되는 데 실패&lt;/b&gt;하면 &lt;b&gt;요청&lt;/b&gt;을 &amp;lsquo;&lt;b&gt;실패&lt;/b&gt; &lt;span style=&quot;color: #787673;&quot;&gt;failed&lt;/span&gt;&amp;rsquo;로 표시하고 VirtualService 리소스에 정의한 최대 재시도 횟수까지 재시도한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238063a5abf2d57567e5fb&quot;&gt;&lt;b&gt;재시도 횟수가 2&lt;/b&gt;이면 실제로는 &lt;b&gt;요청이 3회&lt;/b&gt;까지 전달되는데, &lt;b&gt;한 번은 원래 요청&lt;/b&gt;이고 &lt;b&gt;두 번은 재시도&lt;/b&gt;다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238087b144dcfeae6b3c2f&quot;&gt;재시도 사이에 이스티오는 25ms 를 베이스로 재시도를 &amp;lsquo;백오프&amp;rsquo; 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380ef9d09ed01cf1fb3a1&quot;&gt;재시도 및 백오프 동작을 설명하는 그림 6.13을 참조하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e0b8b2c1c23804898befa01dd4df37d&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;738&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKtGiH/btsNBHrrPcH/P57kuC6j8my3Z6ViRKgJ61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKtGiH/btsNBHrrPcH/P57kuC6j8my3Z6ViRKgJ61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKtGiH/btsNBHrrPcH/P57kuC6j8my3Z6ViRKgJ61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKtGiH%2FbtsNBHrrPcH%2FP57kuC6j8my3Z6ViRKgJ61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;816&quot; height=&quot;336.1301&quot; data-origin-width=&quot;738&quot; data-origin-height=&quot;304&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
요청 실패 시 재시도 요청 흐름&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c238082a319cfa38e616de8&quot;&gt;즉, 이스티오는 재시도에 시차를 주고자 연속적인 재시도에서 (25ms x 재시도 횟수)까지 백오프한다. (기다린다)&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380fb9ed1d977988fd962&quot;&gt;현재 재시도 베이스는 고정돼 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380608697eb7c6f8e32c8&quot;&gt;그러나 다음 절에서 언급하겠지만, 이스티오가 노출하지 않는 엔보이는 API를 바꿀 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23801097c5ff2b097ae66e&quot;&gt;상술했듯이 이스티오의 기본 재시도 횟수는 2회다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23804a9f74eff44969da17&quot;&gt;시스템 내의 계층이 다르면 재시도 횟수도 다르도록 이 값을 재정의하고 싶을 수도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380f392c8e02bf3632d60&quot;&gt;기본값과 같이 재시도 횟수를 무턱대고 설정하면, 심각한 &lt;b&gt;재시도&lt;/b&gt; &amp;lsquo;&lt;b&gt;천둥 무리&lt;/b&gt; &lt;span style=&quot;color: #787673;&quot;&gt;thundering herd&lt;/span&gt;&amp;rsquo; 문제가 발생할 수 있다. (그림 6.14 참조)&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238011a217dd18665e7349&quot;&gt;에를 들어 서비스 체인이 5단계 깊이로 연결돼 있고 각 단계가 두 번씩 재시도할 수 있다면, 들어오는 요청 하나에 대해 최대 32회의 요청이 발생할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380098defe82c0ffa9cc4&quot;&gt;체인 끝부분의 리소스에 과부하가 걸린 상태에서는 이 추가적인 부하가 해당 리소스를 감당할 수 없게 만들어 쓰러뜨릴수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238090b33bcd519b993f47&quot;&gt;이 상황을해결하는 한 가지 방법은 아키텍처 &lt;b&gt;가장자리&lt;/b&gt;에서는 &lt;b&gt;재시도 횟수를 1회 내지 0회로 제한&lt;/b&gt;하고, &lt;b&gt;중간&lt;/b&gt; 요소는 &lt;b&gt;0회&lt;/b&gt;로 하며, 호출 스택 &lt;b&gt;깊숙한 곳에서만 재시도하&lt;/b&gt;게 하는 것이다. 하지만 이 방법도 잘 작동하지는 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238087bc1edcd5d57a425a&quot;&gt;또 다른 전략은 &lt;b&gt;전체 재시도 횟수에 상한&lt;/b&gt;을 두는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23802c83a7f17171d440b6&quot;&gt;재시도 예산 &lt;span style=&quot;color: #787673;&quot;&gt;budget&lt;/span&gt; 를 이용해 조절할 수 있는데, 이 기능은 &lt;b&gt;아직 이스티오 API에서 노출&lt;/b&gt;되지 않고 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23807b811ed2ccb5dcebf7&quot;&gt;이스티오에 이런 문제에 대한 우회로가 있기는 하지만, 이 책의 범위를 벗어나는 내용이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380f5a93ed714bd4c3889&quot;&gt;마지막으로 재시도는 기본적으로 &lt;b&gt;자기 지역의 엔드포인트에 시&lt;/b&gt;도한다. &lt;b&gt;retryRemoteLocalities&lt;/b&gt; 설정은 이 동작에 영향을 준다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380e9894bd210ba1aa514&quot;&gt;&lt;b&gt;true&lt;/b&gt;로 설정하면, 이스티오는 &lt;b&gt;재시도가 다른 지역으로 넘어갈 수 있도록 허용&lt;/b&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380cb9d67dd2eb1b712e4&quot;&gt;이상값 감지가 같은 지역의 엔드포인트가 오작동하고 있음을 알아내기 전에 이 설정이 유용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380f0b388fab45ec05549&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;6.4.3 Advanced retries&lt;/b&gt; : Istio Extension API (&lt;span style=&quot;color: #d7730f;&quot;&gt;&lt;b&gt;EnvoyFilter&lt;/b&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c238054a630dc626a8a6d1d&quot;&gt;앞 절에서는 서비스가 간헐적인 네트워크 실패에 복원력을 갖추는 데 이스티오의 자동 재시도가 어떻게 도움이 되는지 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380ba92acdf7dac5d8957&quot;&gt;재시도 동작을 조정할 수 있는 파라미터도 다뤘다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23803fbc4fdb1e514c9fa6&quot;&gt;재시도 기능 일부는 백오프 시간이나 재시도할 수 있는 상태 코드처럼 바꾸기 어려운 기본값들을 고려한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23805ba47bc9fe96f2c6c2&quot;&gt;기본적으로 백오프 시간은 25ms이고, 재시도할 수 있는 상태 코드는 HTTP 503뿐이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23800ba768d114349e8dc9&quot;&gt;이 책을 저술하는 시점에 이스티오 API가 이 설정을 노출하고 있지는 않지만, 이스티오 확장 API를 사용해 엔보이 설정에서 이 값들을 직접 바꿀수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23808e86e9c55fb963709a&quot;&gt;이때에는 EnvoyFilter API를 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23809b9f77d859a5daaed8&quot;&gt;여기서는 엔보이 API를 직접 사용해 재시도 정책 설정값을 설정하고 재정의한다. 적용해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1e0b8b2c1c2380d090b8ce137c9fb863&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;u&gt;요청 헤징 REQUEST HEDGING&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380f79296e1efda96ff7b&quot;&gt;재시도에 대한 마지막 이야기는 이스티오 API에서도 직접 노출하지 않는 고급 주제를 중심으로 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380329a04c72e93fd157c&quot;&gt;&lt;b&gt;요청이 임계값에 도달해 시간을 초과&lt;/b&gt;하면 &lt;b&gt;요청 헤징을 수행&lt;/b&gt;하도록 선택적으로 엔보이를 설정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380bb8eebf5b67ae2f7f0&quot;&gt;&lt;b&gt;요청 헤징&lt;/b&gt; &lt;span style=&quot;color: #787673;&quot;&gt;request hedging&lt;/span&gt; 이란, &lt;b&gt;요청이 타임아웃되면 다른 호스트로도 요청&lt;/b&gt;을 보내 원래의 타임아웃된 요청과 &amp;lsquo;&lt;b&gt;경쟁&lt;/b&gt; &lt;span style=&quot;color: #787673;&quot;&gt;race&lt;/span&gt;&amp;rsquo; 시키는 것을 말한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238092b1fcd98ec6ec9c61&quot;&gt;경쟁한 요청이 성공적으로 반환되면, 그 응답을 원래 다운스트림 호출자에게 보낸다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23805ba623e985859337d2&quot;&gt;만약 경쟁한 요청보다 원본 요청이 먼저 반환되면 원본 요청이 다운스트림 호출자에게 반환된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c238085b883de66807790b8&quot;&gt;요청 헤징을 설정하려면 다음 EnvoyFilter 리소스를 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380d7b16dcb0b37901003&quot;&gt;이번 절에서 봤듯이, 타임아웃과 재시도에 대한 주제는 그리 간단하지 않다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380a9bf37dbc28825a57f&quot;&gt;서비스에 적절한 타임아웃 및 재시도 정책을 설정하는 것은 어려운 일이며, 둘이 어떻게 연결될 수 있을지를 고려하면 더욱 그렇다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23800faa7ddf11bc8eb460&quot;&gt;타임아웃과 재시도를 잘못 설정하면 시스템 아키텍처에서 의도치 않은 동작을 증폭시켜 시스템을 과부하시키고 연쇄 장애를 일으킬 수도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238081a2f8d8808254b40a&quot;&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;복원력 있는 아키텍처를 구축하는 과정&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;에서 &lt;/span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;마지막 퍼즐 조작&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;은&lt;/span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt; 재시도를 모두 건너뛰는 것&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;이다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238020b533f5dc73a923d1&quot;&gt;즉, &lt;span style=&quot;color: #d34a45;&quot;&gt;&lt;b&gt;재시도하는 대신 빠르게 실패&lt;/b&gt;&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23801fb82dc489928d43c1&quot;&gt;&lt;b&gt;부하를 더 늘리는 대신&lt;/b&gt;에 업스트림 시스템이 &lt;b&gt;복구&lt;/b&gt;될 수 있도록(&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;회복 시간 벌기&lt;/b&gt;&lt;/span&gt;) &lt;b&gt;부하를 잠시 제한&lt;/b&gt;할 수 있으며, 이를 위해 &lt;b&gt;서킷 브레이커&lt;/b&gt;를 사용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c23800ba938e83b8ca2af99&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6.5 Circuit breaking with Istio&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;block-1e0b8b2c1c238028a39dd97648461a9c&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;6.5.0. 들어가며 : 서킷 브레이커 소개&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c238088bb8cfdf76b9220ae&quot;&gt;&lt;b&gt;서킷 브레이커 &lt;/b&gt;기능을 사용하면 부분적이거나&lt;b&gt; 연쇄적인 장애를 방지&lt;/b&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380fe88c4ff91dd1666a3&quot;&gt;비정상 시스템을 계속 과부하시켜 회복을 방해하지 않도록 비정상 시스템으로 향하는 트래픽을 줄이고 싶다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238065bff4de5b06e31ad6&quot;&gt;예를 들어 simple-web 서비스가 simple-backend 서비스를 호출하고 simple-backend 는 연속된 호출에서 오류를 반환하면, 계속 재시도해 시스템에 스트레스를 더 주는 대신 simple-backend로의 호출을 모두 멈추고 싶을 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238059b190eeae366f21cc&quot;&gt;이 방식은 집의 전기 시스템에서 &lt;b&gt;회로 차단기&lt;/b&gt;가 동작하는 방식과 의도가 비슷하다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380b1b29de3459609fae1&quot;&gt;시스템에 단락이 있거나 고장이 반복되면, 회로 차단기는 회로를 개방해 &lt;b&gt;나머지 시스템을 보호하도록 설계&lt;/b&gt;된다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23808499bed06d86eb01da&quot;&gt;서킷 브레이커 패턴은 네트워크 호출이 실패할 수 있고 실제로 실&lt;b&gt;패한다는 사실을 애플리케이션이 처리하게함&lt;/b&gt;으로써&lt;b&gt; 전체 시스템을 연쇄 실패로부터 보호&lt;/b&gt;하는 데 도움이 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c23804ba15cfcf1ca435262&quot;&gt;이스티오에 &amp;lsquo;서킷 브레이커&amp;rsquo;라는 명시적인 설정은 없지만, 백엔드 서비스, 특히 문제가 있는 서비스로의 부하를 제한할 수 있는 방법이 두 가지 있어 서킷 브레이커를 효과적으로 시행할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23800eb001dc475ec0e9e6&quot;&gt;&lt;b&gt;첫 번째&lt;/b&gt;는 특정 서비스로의 &lt;b&gt;커넥션&lt;/b&gt; 및 &lt;b&gt;미해결 요청 개수&lt;/b&gt;를 얼마나 &lt;b&gt;허용&lt;/b&gt;할지 관리하는 것이다. &lt;span style=&quot;color: #787673;&quot;&gt;The first is to manage how &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;many&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;connections&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; and &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;outstanding&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;requests&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; are &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;allowed&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; to a specific service.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380938336e60ea86c2cc7&quot;&gt;그림 6.15처럼 이 방법을 사용해 slow down 시켜서, 클라이언트를 적체시키는 서비스에 대비할 수 있다. &lt;span style=&quot;color: #787673;&quot;&gt;We use this &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;control&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; to &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;guard&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; against services that &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;slow down&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; and thus back up the client, as illustrated in figure 6.15.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380a686d9cbf8459e0c51&quot;&gt;어떤 서비스에 진행 중인 요청이 10개이고 수신 부하가 동일한데 그 수가 계속 증가하고 있다면, 요청을 더 보내는 것은 의미가 없다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23800ababcfb2b8bf2d89e&quot;&gt;요청을 더 보내면 업스트림 서비스가 압도 될 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23800c84dbfa3ea290d938&quot;&gt;이스티오에서는 &lt;b&gt;DestinationRule&lt;/b&gt; 의 &lt;b&gt;connectionPool&lt;/b&gt; 설정을 사용해&lt;b&gt; 서비스 호출 시 누적될 수 있는 커넥션 &lt;/b&gt;및 &lt;b&gt;요청 개수를 제한&lt;/b&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23808ebe0df3b4d72b35c5&quot;&gt;요청이 너무 많이 쌓이면, 요청을 단락(&lt;b&gt;빠르게 실패&lt;/b&gt;)시키고 &lt;b&gt;클라이언트에 반환&lt;/b&gt;할 수 있다. &lt;span style=&quot;color: #787673;&quot;&gt; If too many requests pile up, we can short-circuit them (fail fast) and return to the client.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23800d9abdf6f659d67ea7&quot;&gt;&lt;b&gt;두 번째 &lt;/b&gt;방법은 로드 밸런싱 풀의&lt;b&gt; 엔드포인트에 상태&lt;/b&gt;를 관찰해 &lt;b&gt;오동작&lt;/b&gt;하는 엔드포인트를 &lt;b&gt;잠시 퇴출&lt;/b&gt;시키는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23809fa20ddc1e446d95a8&quot;&gt;서비스 풀의 특정 호스트에 문제가 발생하면 그 호스트로의 트래픽 전송을 건너뛸 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23807fb131e45c13628b6f&quot;&gt;모든 호스트를 소진하면 회로는 한동안 사실상 &amp;lsquo;개방&amp;rsquo;된다. &lt;span style=&quot;color: #787673;&quot;&gt;If we &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;exhaust&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;all&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;hosts&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;, the circuit is effectively '&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;' for a while.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380e39b37d618efb468d9&quot;&gt;이스티오로 이 서킷 브레이커 제어 각각을 어떻게 구현하는지 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c23803b9b9ac38bb5f47ea8&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;6.5.1 Guarding against slow services wih connection-pool control*&lt;/b&gt;&lt;/span&gt;&lt;b&gt; : &lt;/b&gt;커넥션 풀 제어로 느린 서비스에 대응하기&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380369944ea71097c7d1f&quot;&gt;(옵션) tracing 샘플링을 기본 1% &amp;rarr; 100% 늘려두기&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238088a8bae9c702697269&quot;&gt;실습 환경 구성&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238043ae16f50323f18c52&quot;&gt;이스티오의 커넥션 제한 서킷 브레이커 테스트 시작해볼 수 있다. 아주 간단한 로드 테스트를 실행해보자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380c793c9feb03d60ffec&quot;&gt;&lt;b&gt;커넥션 및 요청 제한&lt;/b&gt;을 도입하고 어떤 일이 일어나는지 살펴보자. 아주 간단한 제한으로 시작한다 - &lt;a style=&quot;color: #000000;&quot; href=&quot;https://istio.io/v1.17/docs/reference/config/networking/destination-rule/#ConnectionPoolSettings-HTTPSettings&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23804490d8e1818950de61&quot;&gt;테스트를 다시 실행해 이 설정을 검증하다. 커넥션 하나에 초당 요청을 하나 보낼 때 제대로 동작해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380eebf59c7cbe0c8671c&quot;&gt;정확한 확인을 위해서 이스티오 서비스 프록시에서 더 많은 통계 수집을 활성화하자. &lt;span style=&quot;color: #787673;&quot;&gt;&amp;rArr; &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;서킷 브레이크&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; 영향인지 vs &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;업스트림의 장애&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;인지 확인&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238056a58ec68a57c4b612&quot;&gt;&lt;span style=&quot;color: #787673;&quot;&gt;(참고) 혹시 istio-proxy 상세 로그 확인 필요 시&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380e5b40cf6071d83edb6&quot;&gt;Envoy 메트릭&lt;b&gt; &lt;/b&gt;- &lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/configuration/upstream/cluster_manager/cluster_stats&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23806a805eca966aa7c4e4&quot;&gt;커넥션 개수와 초당 요청 수를 2로 늘리면 어떨까? 2개의 커넥션에서 요청을 초당 하나씩 보내기 시작해보자.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23805687ccf7b5a111d11d&quot;&gt;병렬로 발생하는 요청(현재 로드테스트 동시 요청 2)을 더 처리하고자 &lt;b&gt;http2MaxRequests&lt;/b&gt;(parallel requests)를 늘려보자&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238042b4eeeef9b5f37ad9&quot;&gt;보류 대기열 깊이를 2로 늘리고 다시 실행해보자. &lt;span style=&quot;color: #787673;&quot;&gt;Let&amp;rsquo;s increase the &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;pending queue depth to 2&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; and re-run&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380fa83a3f64546848a6b&quot;&gt;서킷 브레이커가 발동되면 통계를 보고 무슨 일이 일어났는지 확인 할 수 있다. 그런데 런타임은 어떤가?&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238094a358d21a8eef0dbd&quot;&gt;우리 예제에서는 simple-web &amp;rarr; simple-backend 를 호출한다. 그런데 서킷 브레이커 때문에 요청이 실패한다면, simple-web 은 그 사실을 어떻게 알고 애플리케이션이나 네트워크 장애 문제와 구별할 수 있는가?&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380fdbf9cf4cdc9279331&quot;&gt;&lt;b&gt;요청 서킷 브레이커 임계값을 넘겨 실패&lt;/b&gt;하면, 이스티오 서비스 프록시는 x-envoy-overloaded 헤더를 추가한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23809cb771f0d3d20b9557&quot;&gt;이를 테스트하는 한 가지 방법은 커넥션 제한을 가장 엄격한 수준으로 설정하고(커넥션, 보류 요청, 최대 요청을 1로 설정함 &lt;span style=&quot;color: #787673;&quot;&gt;1 for connections, pending requests, and maximum requests&lt;/span&gt;) 로드 테스트를 다시 수행해보는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23803a8173ed532b584176&quot;&gt;로드 테스트를 실행하는 도중에 단일 curl 명령도 실행하면 서킷 브레이커 때문에 실패할 가능성이 높다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380a18f9dc309c398d6d7&quot;&gt;일반적으로 네트워크가 실패할 수 있다는 점을 감안해 애플리케이션 코드를 작성해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380cc9337d8520b5b5b39&quot;&gt;애플리케이션 코드가 이 헤더를 확인하면 호출한 클라이언트에게 응답을 보내기 위해 대체 전략 &lt;span style=&quot;color: #787673;&quot;&gt;fallback&lt;/span&gt; 을 사용하는 결정을 내릴 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e0b8b2c1c23803dabebf1f1adda90f8&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;span style=&quot;color: #347da8;&quot;&gt;&lt;b&gt;6.5.2 Guarding against unhealthy services with outlier detection*&lt;/b&gt;&lt;/span&gt; : 이상값 감지로 비정상 서비스에 대응하기&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380c9a7f2da7057662f03&quot;&gt;앞 절에서는 서비스에 예기치 못한 지연 시간이 있을 때 오동작하는 서비스로의 요청을 이스티오가 어떻게 제한할 수 있는지 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23802399f4fab38e9ff906&quot;&gt;이번 절에서는 &lt;b&gt;오동작 &lt;/b&gt;&lt;span style=&quot;color: #787673;&quot;&gt;misbehaving&lt;/span&gt;&lt;b&gt; 하는 특정 호스&lt;/b&gt;트를 &lt;b&gt;서비스에서 제거&lt;/b&gt;하는 이스티오의 접근법을 다룬다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380719a22cac4c462fff2&quot;&gt;이스티오는 이를 위해&lt;b&gt; 엔보이의 이상값 감지 기능&lt;/b&gt;을 사용한다. &lt;span style=&quot;color: #787673;&quot;&gt;Istio uses &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;Envoy&amp;rsquo;s&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt;&lt;b&gt;outlier-detection&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #787673;&quot;&gt; functionality for this.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380718d7ae2d6fb985b60&quot;&gt;실습 환경 초기화&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238002bb77dbf3e775cfd7&quot;&gt;정기적으로 실패하는 서비스에 요청을 보내고 있는데 서비스의 다른 엔드포인트들은 실패하지 않고 있다면, 해당&lt;span style=&quot;color: #d34a45;&quot;&gt;&lt;b&gt; 엔드포인트가 과부하됐거나 어떤 이유로든 성능이 저하된 상태&lt;/b&gt;&lt;/span&gt;일 수 있으므로&lt;span style=&quot;color: #d34a45;&quot;&gt;&lt;b&gt; 당분간 그 엔드포인트로 트래픽을 전송하는 것을 멈춰야 한다.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380e9a5f1f9b7b6859058&quot;&gt;&lt;b&gt;이상값 감지를 설정&lt;/b&gt;해보자 : &lt;b&gt;기존 오류율 대비 극적으로 감소 &amp;rarr; 오동작하는 엔드포인트를 잠시 제거했&lt;/b&gt;기 때문이다. - &lt;a style=&quot;color: #000000;&quot; href=&quot;https://istio.io/latest/docs/reference/config/networking/destination-rule/&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380a7bc29f05b7fbbb6ea&quot;&gt;오류률을 더 개선해보자. 기본 재시도 설정을 추가해보자. VirtuslService 에 명시적으로 설정 가능. (현재 mesh 기본 재시도 0 상태)&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238072a71cfa905b39643f&quot;&gt;이번 장 이전에는 이스티오의 기능과 API를 사용해, 인그레스 게이트웨이를 사용한 예지에서부터 클러스터 내 통신에 이르기까지 네트워크의 동작을 바꾸는 방법을 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c238016a9fbf55ea14bbe24&quot;&gt;그러나 이번 장의 서두에서 언급했듯이, 끊임없이 변화하는 대규모 시스템에서 예상치 못한 네트워크 오류에 대응하기 위한 수동적인 개입은 불가능에 가까운 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380dab982c486b38e90c0&quot;&gt;이번 장에서의 이스티오의 다양한 클라이언트 측 복원력 기능을 깊이 들여다봤다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c2380c69742c8660ab57c42&quot;&gt;이 기능들은 서비스가 간헐적인 네트워크 문제나 토폴로지 변화로부터 투명하게 복구될 수 있도록 돕는다.&lt;/li&gt;
&lt;li id=&quot;block-1e0b8b2c1c23802888dddeed8ce3b11e&quot;&gt;다음 장에서는 이런 기능을 더해 네트워크 동작을 관찰하는 방법을 살펴볼 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1e1b8b2c1c2380198f7fcd640c4b39d1&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;b&gt;6.6. Summary&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1e1b8b2c1c238079ae62fe5e51d2d953&quot;&gt;로드 밸런싱은 DestinationRule 리소스로 설정한다. 지원하는 알고리듬은 다음과 같다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380339f9fdcc3492b4644&quot;&gt;이스티오는 노드의 영역 및 리전 정보를 엔드포인트 상태 정보(&lt;span style=&quot;color: #787673;&quot;&gt;outlierDetection&lt;/span&gt; 이 설정돼 있어야 함)와 함께 활용해 트래픽을 동일 영역 내의 워크로드로 라우팅한다. (가능한 경우 그렇게 하고, 그렇지 않을 경우 다음 영역으로 넘긴다)&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c23808a89b8f8743bf22b2b&quot;&gt;DestinationRule 를 사용하면 클라이언트가 여러 지역에 가중치를 부여해 트래픽을 분배하도록 설정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380ecb49fd192afc4f194&quot;&gt;재시도와 타임아웃은 VirtualService 리소스에서 설정한다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380fdbdf5e6add751efb1&quot;&gt;EnvoyFilter 리소스를 사용하면 이스티오 API가 노출하지 않은 엔보이의 기능을 구현할 수 있다. 요청 헤징으로 이를 보여줬다.&lt;/li&gt;
&lt;li id=&quot;block-1e1b8b2c1c2380f39b15f2f52879ad18&quot;&gt;서킷 브레이커는 DestinationRule 리소스에서 설정하는데, 이 기능은 트래픽을 더 전송하기 전에 업스트림 서비스가 회복할 시간을 벌어준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Kubernetes</category>
      <author>ManMan</author>
      <guid isPermaLink="true">https://gylee815.tistory.com/31</guid>
      <comments>https://gylee815.tistory.com/31#entry31comment</comments>
      <pubDate>Sun, 27 Apr 2025 00:16:03 +0900</pubDate>
    </item>
    <item>
      <title>[AEWS 3기] 11주차 - ML Infra(GPU) on EKS</title>
      <link>https://gylee815.tistory.com/30</link>
      <description>&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380d3ab4fc8bffbcd174a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Configure Storgae - Host model data on Amazon FSx for Lustre&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c238038b85ec1349996e6ae&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.1. 실습 소개&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1dab8b2c1c2380f7b705f4c034f61cb7&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 워크숍에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mistral-7B-Instruct&lt;/span&gt; 모델이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon S3 Bucket&lt;/span&gt;에 저장되어 있으며, 이 버킷은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon FSx for Lustre File System&lt;/span&gt;과 연결되어 있습니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM Container&lt;/span&gt;는 이를 활용하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Generative AI ChatBot Application&lt;/span&gt;을 실행합니다.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c238054ba29c1c45555d6c5&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 모듈에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon FSx for Lustre&lt;/span&gt; 인스턴스를 배포하고 이를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon EKS Cluster&lt;/span&gt;와 통합하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Generative AI Application&lt;/span&gt;을 호스팅하는 방법을 학습합니다. 또한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Kubernetes&lt;/span&gt; 스토리지 개념, 예를 들어 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CSI Driver&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volumes&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;StorageClass&lt;/span&gt;, 그리고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Static Provisioning&lt;/span&gt;과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Dynamic Provisioning&lt;/span&gt;의 차이점을 알아봅니다. 이 모듈의 인프라는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon EKS Cluster&lt;/span&gt;(2개의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EC2 Worker Nodes&lt;/span&gt; 포함), &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon FSx for Lustre File System&lt;/span&gt;, 그리고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon S3 Bucket&lt;/span&gt;으로 구성됩니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380ba98abc74a28163c86&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1dab8b2c1c23804eaf89c5a0fbc44ae4&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-weight: var(--heading-weight); margin-bottom: 0px; padding: 3px 2px; position: relative; font-family: var(--primary-font); font-size: var(--heading3-size); margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;Amazon FSx for Lustre&lt;/h3&gt;
&lt;p id=&quot;block-1dab8b2c1c23808e93e2d6b508a918cb&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon FSx for Lustre&lt;/span&gt;는 완전 관리형 서비스로, 속도가 중요한 워크로드(예: &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Machine Learning&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Analytics&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;High Performance Compute&lt;/span&gt;)를 위한 고성능 병렬 파일 시스템을 제공합니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt;는 밀리초 미만의 지연 시간(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;sub-millisecond latency&lt;/span&gt;)으로 데이터에 접근할 수 있으며, 테라바이트 단위의 처리량(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TB/s of throughput&lt;/span&gt;)과 수백만 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IOPS&lt;/span&gt;로 확장 가능합니다. 또한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon S3&lt;/span&gt;와 통합되어 클라우드 데이터를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Lustre&lt;/span&gt; 고성능 파일 시스템으로 쉽게 저장, 접근, 처리할 수 있습니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;S3 Bucket&lt;/span&gt;과 연결될 경우, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre File System&lt;/span&gt;은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;S3 Objects&lt;/span&gt;를 파일로 투명하게 표시하며, 파일이 추가, 수정, 삭제될 때 연결된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;S3 Bucket&lt;/span&gt;의 내용을 자동으로 업데이트합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380d6a06ce5c079948a54&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1dab8b2c1c2380b88df5d872c9f6bbd8&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-weight: var(--heading-weight); margin-bottom: 0px; padding: 3px 2px; position: relative; font-family: var(--primary-font); font-size: var(--heading3-size); margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;Kubernetes 스토리지 개념 및 FSx for Lustre 통합&lt;/h3&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1dab8b2c1c238081b023d63e606ac00f&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-weight: var(--heading-weight); margin-bottom: 0px; padding: 3px 2px; position: relative; font-family: var(--primary-font); font-size: var(--heading3-size); margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;CSI Driver&lt;/h3&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238022a52ec2d47adf8f44&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Container Storage Interface (CSI)는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Kubernetes&lt;/span&gt;와 같은 컨테이너 오케스트레이션 시스템에서 블록 및 파일 스토리지 시스템을 노출하기 위한 표준입니다. 이를 통해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Kubernetes&lt;/span&gt;는 컨테이너화된 애플리케이션에 대해 영구 스토리지를 기본적으로 관리할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c2380838d3ef0c26bfec9b8&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre CSI Driver&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon EKS Cluster&lt;/span&gt;가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre File System&lt;/span&gt; 기반의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volumes&lt;/span&gt;의 라이프사이클을 관리할 수 있도록 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CSI Interface&lt;/span&gt;를 제공합니다. 이 드라이버를 사용하면 고성능, 저지연(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;low-latency&lt;/span&gt;) 영구 스토리지를 컨테이너 워크로드에 빠르고 쉽게 통합할 수 있습니다.&lt;/p&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1dab8b2c1c2380399a73fa5e8526acd8&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-weight: var(--heading-weight); margin-bottom: 0px; padding: 3px 2px; position: relative; font-family: var(--primary-font); font-size: var(--heading3-size); margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;StorageClass&lt;/h3&gt;
&lt;p id=&quot;block-1dab8b2c1c2380878c4ad0481b95bdd9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;StorageClass&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EKS&lt;/span&gt; 관리자가 제공하는 스토리지의 &quot;클래스&quot;를 정의하는 방법입니다. 서로 다른 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;StorageClass&lt;/span&gt;는 다양한 스토리지 유형(예: &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon FSx&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon EBS&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon EFS&lt;/span&gt;) 또는 백업 정책에 매핑될 수 있습니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Kubernetes&lt;/span&gt;는 이러한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;StorageClass&lt;/span&gt;가 무엇을 나타내는지에 대해 특정한 제약을 두지 않습니다.&lt;/p&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1dab8b2c1c23807db56bd3457053363c&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-weight: var(--heading-weight); margin-bottom: 0px; padding: 3px 2px; position: relative; font-family: var(--primary-font); font-size: var(--heading3-size); margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;Persistent Volume (PV)&lt;/h3&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380ec9877f1655cb8b29d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Persistent Volume (PV)는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EKS Cluster&lt;/span&gt;에 매핑된, 관리자가 이미 프로비저닝한 스토리지 볼륨입니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PV&lt;/span&gt;의 라이프사이클은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;의 수명을 초월하므로, 공유 데이터에 접근해야 하며 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;의 수명을 넘어 지속되어야 하는 데이터에 이상적인 선택입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1dab8b2c1c2380ba91cef3f494f8fa16&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-weight: var(--heading-weight); margin-bottom: 0px; padding: 3px 2px; position: relative; font-family: var(--primary-font); font-size: var(--heading3-size); margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;Persistent Volume Claim (PVC)&lt;/h3&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23806684abfe0e5d291f13&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Persistent Volume Claim (PVC)는 사용자가 스토리지 볼륨을 요청하는 것입니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PVC&lt;/span&gt;는 특정 크기와 접근 모드(예: &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ReadWriteOnce&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ReadOnlyMany&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ReadWriteMany&lt;/span&gt;)를 요청할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;notion-heading__anchor&quot;&gt;&lt;/span&gt;
&lt;h3 id=&quot;block-1dab8b2c1c23806d998df36d77cc8127&quot; class=&quot;notion-heading notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.3em; white-space-collapse: preserve; word-break: break-word; font-weight: var(--heading-weight); margin-bottom: 0px; padding: 3px 2px; position: relative; font-family: var(--primary-font); font-size: var(--heading3-size); margin-top: 0.75rem;&quot; data-ke-size=&quot;size23&quot;&gt;Static Provisioning vs Dynamic Provisioning&lt;/h3&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23805193a6c39bf9816d68&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Static Provisioning&lt;/span&gt;: 스토리지를 생성하고 사용하는 두 단계 프로세스입니다.&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380b8a3d7d9c91c908f4f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;관리자가 스토리지 인스턴스(예: 새로운 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt; 인스턴스)에 백엔드 스토리지 볼륨을 생성한 후, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Kubernetes Cluster&lt;/span&gt;에서 해당 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre Instance&lt;/span&gt;에 대한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volume (PV)&lt;/span&gt; 정의를 생성합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380e098b7fa008151d006&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;애플리케이션 개발자가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PVC&lt;/span&gt; 요청을 제출하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volume&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;에서 사용합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;li id=&quot;block-1dab8b2c1c23808aacddc9e778597766&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Dynamic Provisioning&lt;/span&gt;: 관리자가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EKS Cluster&lt;/span&gt;에 스토리지를 미리 프로비저닝할 필요를 없애줍니다. 사용자는 필요에 따라 영구 스토리지를 요청할 수 있으며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PVC&lt;/span&gt; 요청이 발생하면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volume&lt;/span&gt;과 관련된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre Instance&lt;/span&gt;가 자동으로 프로비저닝됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c2380e38afecbd19ce94e4f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c238027be05ff85cc2839d0&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.2. Deploy CSI Driver&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1dab8b2c1c23806fb2a1ed330e705554&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 섹션에서는 환경 변수를 설정하고, 서비스 계정을 생성하며, EKS 클러스터에서 FSx for Lustre용 CSI 드라이버를 배포하기 위해 IAM 정책을 생성하고 연결하는 단계를 안내합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23801aa8e7f8742672329b&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380f5a054eb4f07ce4353&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.2.1. 전제 조건 - account-id 환경 변수 설정&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23805f90d2fe99cc9ba910&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Cloud9 터미널에 다음 명령어를 복사하여 붙여넣습니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380bd8f0ed628ab9b4073&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;ACCOUNT_ID=$(aws sts get-caller-identity --query &quot;Account&quot; --output text)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380f799d4f0fe5d6b7934&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;참고&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c23806fb8dcd6f2bf305ca9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS 주최 워크숍의 경우, 보안 그룹(Security Group)과 S3 버킷은 이미 사전에 생성되어 있습니다.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c238076a292eb5d2a0acd70&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;FSx Lustre 보안 그룹에 필요한 규칙에 대한 자세한 정보는 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://docs.aws.amazon.com/fsx/latest/LustreGuide/limit-access-security-groups.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;official document&amp;nbsp;&lt;/a&gt;를 참조하세요.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23807cb225c0942d307fd0&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238050a3add4509450c42f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.2.2. CSI 드라이버가 AWS API 호출을 수행할 수 있도록 IAM 정책 및 서비스 계정 생성&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380e28298c577e582d565&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령어를 복사하여 실행하여 fsx-csi-driver.json 파일을 생성합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380e1a519d97c8683fba6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;cat &amp;lt;&amp;lt; EOF &amp;gt; fsx-csi-driver.json
{
    &quot;Version&quot;:&quot;2012-10-17&quot;,
    &quot;Statement&quot;:[
        {
            &quot;Effect&quot;:&quot;Allow&quot;,
            &quot;Action&quot;:[
                &quot;iam:CreateServiceLinkedRole&quot;,
                &quot;iam:AttachRolePolicy&quot;,
                &quot;iam:PutRolePolicy&quot;
            ],
            &quot;Resource&quot;:&quot;arn:aws:iam::*:role/aws-service-role/s3.data-source.lustre.fsx.amazonaws.com/*&quot;
        },
        {
            &quot;Action&quot;:&quot;iam:CreateServiceLinkedRole&quot;,
            &quot;Effect&quot;:&quot;Allow&quot;,
            &quot;Resource&quot;:&quot;*&quot;,
            &quot;Condition&quot;:{
                &quot;StringLike&quot;:{
                    &quot;iam:AWSServiceName&quot;:[
                        &quot;fsx.amazonaws.com&quot;
                    ]
                }
            }
        },
        {
            &quot;Effect&quot;:&quot;Allow&quot;,
            &quot;Action&quot;:[
                &quot;s3:ListBucket&quot;,
                &quot;fsx:CreateFileSystem&quot;,
                &quot;fsx:DeleteFileSystem&quot;,
                &quot;fsx:DescribeFileSystems&quot;,
                &quot;fsx:TagResource&quot;
            ],
            &quot;Resource&quot;:[
                &quot;*&quot;
            ]
        }
    ]
}
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23804ebf0fd26e07a7ce56&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238087ad24fdac7c7c8335&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.2.3. IAM 정책 생성&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23809ab7bad06cd93acc71&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;다음 명령어를 복사하여 실행하여 IAM 정책을 생성합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380fea0a8ea92dcb378e0&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;aws iam create-policy \
        --policy-name Amazon_FSx_Lustre_CSI_Driver \
        --policy-document file://fsx-csi-driver.json&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23806f9482cc40b7204abb&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380f0a078d6d6ecd31ea1&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.2.4. 드라이버용 Kubernetes 서비스 계정 생성 및 정책 연결&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c238035b95eea7cbfdb76ff&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령어를 복사하여 실행하여 서비스 계정을 생성하고, 3단계에서 생성한 IAM 정책을 연결합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238021a3def144060b3f09&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;eksctl create iamserviceaccount \
    --region $AWS_REGION \
    --name fsx-csi-controller-sa \
    --namespace kube-system \
    --cluster $CLUSTER_NAME \
    --attach-policy-arn arn:aws:iam::$ACCOUNT_ID:policy/Amazon_FSx_Lustre_CSI_Driver \
    --approve
    
2025-04-19 14:08:38 [ℹ]  1 iamserviceaccount (kube-system/fsx-csi-controller-sa) was included (based on the include/exclude rules)
2025-04-19 14:08:38 [!]  serviceaccounts that exist in Kubernetes will be excluded, use --override-existing-serviceaccounts to override
2025-04-19 14:08:38 [ℹ]  1 task: { 
    2 sequential sub-tasks: { 
        create IAM role for serviceaccount &quot;kube-system/fsx-csi-controller-sa&quot;,
        create serviceaccount &quot;kube-system/fsx-csi-controller-sa&quot;,
    } }2025-04-19 14:08:38 [ℹ]  building iamserviceaccount stack &quot;eksctl-eksworkshop-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa&quot;
2025-04-19 14:08:38 [ℹ]  deploying stack &quot;eksctl-eksworkshop-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa&quot;
2025-04-19 14:08:38 [ℹ]  waiting for CloudFormation stack &quot;eksctl-eksworkshop-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa&quot;
....&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238070bd39ea72ae53fc56&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;참고&lt;/span&gt;: 위 명령은 완료까지 30~60초 정도 소요됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c2380308395e3a7116548f5&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;서비스 계정이 생성되는 동안 여러 줄의 출력이 표시됩니다. 마지막 출력은 아래와 유사합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380a7bd8ac8362d399d02&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;2023-09-29 07:40:56 [ℹ]  created serviceaccount &quot;kube-system/fsx-csi-controller-sa&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23802f8d50da64ff841ae8&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380faa3d6fdf04d08b43e&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.2.5. 생성된 역할 ARN을 변수로 저장&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380678e7ac7986dd55fa8&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령어를 복사하여 실행하여 역할 ARN을 저장합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380dbb2d4f114d7980711&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;export ROLE_ARN=$(aws cloudformation describe-stacks --stack-name &quot;eksctl-${CLUSTER_NAME}-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa&quot; --query &quot;Stacks[0].Outputs[0].OutputValue&quot;  --region $AWS_REGION --output text)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c238035af26e56a2ac4fbd2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380869a0ada28ca187529&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;ROLE_ARN의 출력 값을 메모장에 복사합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23803fa0ddc472e2c566ac&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;echo $ROLE_ARN

arn:aws:iam::576809327369:role/eksctl-eksworkshop-addon-iamserviceaccount-ku-Role1-RX4wBEdHMjfD&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23808fadb7dd8b0c3af179&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238097a523c1e8e21fa6bc&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.2.6. FSx for Lustre용 CSI 드라이버 배포&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23805f849edc0fb310ab5c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;다음 명령어를 복사하여 실행하여 FSx for Lustre용 CSI 드라이버를 배포합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380aca58cf5c7c3f1ed30&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl apply -k &quot;github.com/kubernetes-sigs/aws-fsx-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-1.2&quot;
...
serviceaccount/fsx-csi-controller-sa configured
serviceaccount/fsx-csi-node-sa created
clusterrole.rbac.authorization.k8s.io/fsx-csi-external-provisioner-role created
clusterrole.rbac.authorization.k8s.io/fsx-csi-node-role created
clusterrole.rbac.authorization.k8s.io/fsx-external-resizer-role created
clusterrolebinding.rbac.authorization.k8s.io/fsx-csi-external-provisioner-binding created
clusterrolebinding.rbac.authorization.k8s.io/fsx-csi-node-getter-binding created
clusterrolebinding.rbac.authorization.k8s.io/fsx-csi-resizer-binding created
deployment.apps/fsx-csi-controller created
daemonset.apps/fsx-csi-node created
csidriver.storage.k8s.io/fsx.csi.aws.com created&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23809595a6c8fceb38130e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380d5b739d68d66faa259&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;CSI 드라이버가 성공적으로 설치되었는지 확인하려면 다음 명령어를 실행합니다.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c238093999ee5b31e91d226&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;결과는 아래와 같이 출력된어야 합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380fb94d0efd156a0486e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl get pods -n kube-system -l app.kubernetes.io/name=aws-fsx-csi-driver
NAME                                  READY   STATUS    RESTARTS   AGE
fsx-csi-controller-6f4c577bd4-nm8nh   4/4     Running   0          30s
fsx-csi-controller-6f4c577bd4-vg2vx   4/4     Running   0          30s
fsx-csi-node-jf5fg                    3/3     Running   0          30s
fsx-csi-node-jrnsj                    3/3     Running   0          30&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380c39c1acc17290ccce5&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380138ccaf161a33defa6&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.2.7. 위에서 생성한 서비스 계정(SA)에 주석 추가&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23804097d7eaa0986ac594&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;다음 명령어를 복사하여 실행하여 서비스 계정에 IAM 역할을 추가합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23800fbb48d914e05d920d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl annotate serviceaccount -n kube-system fsx-csi-controller-sa \
 eks.amazonaws.com/role-arn=$ROLE_ARN --overwrite=true&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c238021876fd753e7e15f4b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23805a82fae8ed8da7bb18&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;성공 여부를 확인하려면 다음 명령어로 서비스 계정 내용을 확인합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23806cbab2ed7bb9b9f455&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380ab99efdd532c2c8902&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;서비스 계정에 방금 생성한 IAM 역할에 대한 주석이 추가된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238034b835d057bc05ac9b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl get sa/fsx-csi-controller-sa -n kube-system -o yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::576809327369:role/eksctl-eksworkshop-addon-iamserviceaccount-ku-Role1-RX4wBEdHMjfD
    kubectl.kubernetes.io/last-applied-configuration: |
      {&quot;apiVersion&quot;:&quot;v1&quot;,&quot;kind&quot;:&quot;ServiceAccount&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app.kubernetes.io/name&quot;:&quot;aws-fsx-csi-driver&quot;},&quot;name&quot;:&quot;fsx-csi-controller-sa&quot;,&quot;namespace&quot;:&quot;kube-system&quot;}}
  creationTimestamp: &quot;2025-04-19T14:09:08Z&quot;
  labels:
    app.kubernetes.io/managed-by: eksctl
    app.kubernetes.io/name: aws-fsx-csi-driver
  name: fsx-csi-controller-sa
  namespace: kube-system
  resourceVersion: &quot;1075584&quot;
  uid: 7d3a14a1-3113-485a-8fd6-a61ffc9c4b38&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23802fbbf4e46d441b5e75&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380d58dd4c7c2ca1ebb18&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.2.8. 요약&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380388237e194b9c7c0f4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 섹션에서는 환경 변수 설정, 적절한 IAM 정책 및 역할 ARN을 포함한 서비스 계정 생성, 그리고 FSx for Lustre용 CSI 드라이버 배포를 완료했습니다. 다음 섹션에서는 FSx for Lustre용 Persistent Volume(PV), Persistent Volume Claim(PVC), 및 StorageClass를 생성할 것입니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23801f900bf5f2902fbd47&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.3. EKS Cluster에 PV 생성하기&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1dab8b2c1c2380a1bdefda0a8747285b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;3.3.1. Persistent Volumes 생성을 위한 두 가지 방법&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380409245e22fc3f74518&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Static Provisioning (정적 프로비저닝)&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380fbabecd1ea347533ca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;관리자가 백엔드 스토리지 엔터티를 생성하고, Persistent Volume (PV, 영구 볼륨)을 생성합니다. 이후 사용자는 이 PV를 자신의 Pod(파드)에서 사용하기 위해 Persistent Volume Claim (PVC, 영구 볼륨 클레임)을 생성합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1dab8b2c1c2380a68252c6b4ca63798a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Dynamic Provisioning (동적 프로비저닝)&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380f08fabe22728db0b57&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;사용자가 PVC를 요청하면, 사용자의 요구사항에 따라 CSI 드라이버가 자동으로 PV와 해당 백엔드 스토리지 엔터티를 생성합니다. 이 방법은 관리자가 미리 PV를 생성할 필요가 없는 방식입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c23805a86d7e4b8809fe971&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23806e812dd0353b8c4949&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;3.3.2. 실습 - Static Provisioning을 사용한 Persistent Volume 생성&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23806bb2aec392b50b48e7&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 실습에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Static Provisioning (정적 프로비저닝)&lt;/span&gt; 방법을 사용하여 Persistent Volume (PV)을 생성합니다. 이미 프로비저닝된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt; 인스턴스를 사용하며, 이 인스턴스는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon S3 버킷&lt;/span&gt;에 연결되어 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mistral-7B 모델&lt;/span&gt;을 저장하고 있습니다. 여기서는 Persistent Volume 정의를 생성하고 Persistent Volume Claim을 만들어, vLLM Pod에서 Mistral-7B 모델 데이터를 사용할 수 있도록 설정합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380358cf3d42396212532&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380fd8c7bfb38ece7757b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;3.3.3. 준비 - 작업 디렉토리 이동 및 환경 변수 설정&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23806699b8de566474ba6a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;작업 디렉토리로 이동:&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c23804fb1f9f98daf5fa9e3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;cd /home/ec2-user/environment/eks/FSxL&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380ddb5f7f6bd236e3bca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;FSx for Lustre 인스턴스 세부 정보를 환경 변수에 설정:&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c23805f851fd01b977c9ebe&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;FSXL_VOLUME_ID=$(aws fsx describe-file-systems --query 'FileSystems[].FileSystemId' --output text)
DNS_NAME=$(aws fsx describe-file-systems --query 'FileSystems[].DNSName' --output text)
MOUNT_NAME=$(aws fsx describe-file-systems --query 'FileSystems[].LustreConfiguration.MountName' --output text)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380a0b615eadba23c4582&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238048ad5dc9898e90a367&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;3.3.3. Step 1: Persistent Volume (PV, 영구 볼륨) 생성&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380b69a9dc7fb0c728228&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volume 정의 파일 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c238082a0e0d0232524d44d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래는 FSx for Lustre 인스턴스를 위한 Persistent Volume 정의 파일(fsxL-persistent-volume.yaml)입니다. 이 파일은 1200GiB FSx for Lustre 인스턴스를 EKS 클러스터 리소스로 등록하며, 이름은 fsx-pv로 지정됩니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23804283bbfb47f93b2daf&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;# fsxL-persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: fsx-pv
spec:
  persistentVolumeReclaimPolicy: Retain
  capacity:
    storage: 1200Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  mountOptions:
    - flock
  csi:
    driver: fsx.csi.aws.com
    volumeHandle: FSXL_VOLUME_ID
    volumeAttributes:
      dnsname: DNS_NAME
      mountname: MOUNT_NAME&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23809fb4dde48703792d24&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;환경 변수로 값 치환&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c2380909a71cac7d5604350&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;FSx for Lustre 인스턴스의 실제 값으로 FSXL_VOLUME_ID, DNS_NAME, MOUNT_NAME을 치환합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23801285d4ccada65c0408&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;sed -i'' -e &quot;s/FSXL_VOLUME_ID/$FSXL_VOLUME_ID/g&quot; fsxL-persistent-volume.yaml
sed -i'' -e &quot;s/DNS_NAME/$DNS_NAME/g&quot; fsxL-persistent-volume.yaml
sed -i'' -e &quot;s/MOUNT_NAME/$MOUNT_NAME/g&quot; fsxL-persistent-volume.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23801c8e2af1c39a2c14ba&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volume 정의 파일 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c2380fb9911f283856665c9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;치환된 Persistent Volume 정의 파일을 확인합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23800fb4c8ebca06435ff6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;cat fsxL-persistent-volume.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: fsx-pv
spec:
  persistentVolumeReclaimPolicy: Retain
  capacity:
    storage: 1200Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  mountOptions:
    - flock
  csi:
    driver: fsx.csi.aws.com
    volumeHandle: fs-04cfba6267f7c90e9
    volumeAttributes:
      dnsname: fs-04cfba6267f7c90e9.fsx.us-west-2.amazonaws.com
      mountname: bietbb4v&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238039a1f6d79ea2ee7e05&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volume 배포&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c23807f80ebe87905f4284f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;EKS 클러스터에 Persistent Volume을 배포합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380b1a6e7d5c9db4dcea2&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl apply -f fsxL-persistent-volume.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23801b9e61e069d83cc23b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volume 생성 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c2380e78664cbfca280ca36&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;fsx-pv라는 이름의 PV가 생성되었는지 확인합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23806da896c9a3928ef001&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl get pv&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23804dac5ddd267a693ad8&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238017b7f7c51633d2cece&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.3.4. Step 2: Persistent Volume Claim (PVC, 영구 볼륨 클레임) 생성&lt;/span&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380e3848fc6066c409b79&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volume Claim 정의 파일 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c238089b69fc37582dba698&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래는 Persistent Volume Claim 정의 파일(fsxL-claim.yaml)입니다. 이 파일은 이전 단계에서 생성한 fsx-pv라는 Persistent Volume과 바인딩됩니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23801fbd18ec7c90b00780&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;# fsxL-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: fsx-lustre-claim
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: &quot;&quot;
  resources:
    requests:
      storage: 1200Gi
  volumeName: fsx-pv&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238073ac34d38ed891cb45&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volume Claim 배포&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c23807fbd7ac26b56e4d7bb&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;EKS 클러스터에 Persistent Volume Claim을 배포합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23806aace9d783d3a04868&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl apply -f fsxL-claim.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380339a55e09991536d12&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volume Claim 바인딩 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c2380c79161ddc9db6c3d7c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Persistent Volume Claim(fsx-lustre-claim)이 Persistent Volume(fsx-pv)에 바인딩되었는지 확인합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23802c810ceab832990748&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl get pv,pvc

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                                                      STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
persistentvolume/fsx-pv                                     1200Gi     RWX            Retain           Bound    default/fsx-lustre-claim                                                                  &amp;lt;unset&amp;gt;                          12s
persistentvolume/pvc-290eab08-4727-4a78-8cc6-7ca2020bb730   50Gi       RWO            Delete           Bound    kube-prometheus-stack/data-prometheus-kube-prometheus-stack-prometheus-0   gp3            &amp;lt;unset&amp;gt;                          2d11h

NAME                                     STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/fsx-lustre-claim   Pending   fsx-pv   0                                        &amp;lt;unset&amp;gt;                 7m7s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c238038bdf0daa704c0e848&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380f2b21cd72afcbc1608&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.3.5. 요약&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c238090b791d9f506571312&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 실습에서 **Persistent Volume (PV)**을 성공적으로 설정하고, **Persistent Volume Claim (PVC)**을 생성하여 vLLM Pod에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mistral-7B 모델&lt;/span&gt; 데이터를 사용할 수 있도록 준비했습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23802d823cd7ce74bf24f5&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.4. FSx 콘솔에서 내용 확인하기&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1dab8b2c1c238023871fc2293a57a812&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이전 단계에서 이 랩에서 미리 프로비저닝된 FSx for Lustre를 사용하여 Persistent Volume(PV)을 설정했습니다. 이제 FSx for Lustre 인스턴스의 설정과 옵션을 살펴보겠습니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23804b997aefd00f886ecb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;참고&lt;/span&gt;: 이 워크숍의 후속 섹션에서 EKS 클러스터와 함께 FSx for Lustre 인스턴스를 직접 배포하고 설정할 기회가 있을 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c2380ebba22ec6cdc941c72&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23800facbaff60ad4a7267&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1. Amazon FSx 콘솔로 이동&lt;/span&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380409165c25bab6d0e55&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon FSx 콘솔&lt;/span&gt;로 이동합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c238073902dfe9adbc9f395&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;오른쪽 상단에서 이 랩에서 제공된 AWS 리전(aws_region)을 선택합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c2380889b20c049073ce727&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380b8bb6be723c190b520&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238055ad79c12bd1b50662&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2. FSx 인스턴스 목록 확인&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380568eb1dc4622315dea&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;FSx 콘솔에서 FSx 인스턴스 목록을 확인할 수 있습니다. 여기에는 랩에서 미리 프로비저닝된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre 인스턴스&lt;/span&gt;의 세부 정보가 포함되어 있으며, 이는 EKS 클러스터에서 Persistent Volume으로 설정한 인스턴스입니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4YBCa/btsNsRgoMMj/lKbSsSNhXv3VI2P9Cl4Alk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4YBCa/btsNsRgoMMj/lKbSsSNhXv3VI2P9Cl4Alk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4YBCa/btsNsRgoMMj/lKbSsSNhXv3VI2P9Cl4Alk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4YBCa%2FbtsNsRgoMMj%2FlKbSsSNhXv3VI2P9Cl4Alk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;349&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1dab8b2c1c2380a2a713fbfe5425036e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dbb8b2c1c2380fd9afbf90808f967d9&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380c1bfe2c98b465eee53&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtDu38/btsNrYgMbeY/DakjBVbtewRLKOWaNVViCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtDu38/btsNrYgMbeY/DakjBVbtewRLKOWaNVViCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtDu38/btsNrYgMbeY/DakjBVbtewRLKOWaNVViCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtDu38%2FbtsNrYgMbeY%2FDakjBVbtewRLKOWaNVViCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;799&quot; height=&quot;349&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238044a690f50a1f4c10b4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3. 새로운 FSx for Lustre 인스턴스 배포 옵션 확인&lt;/span&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23805db7e5ef5ca0c2bf66&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;오른쪽 상단의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Create file system(파일 시스템 생성)&lt;/span&gt; 버튼을 클릭합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23802db79fe8fe4659ea3e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon FSx for Lustre&lt;/span&gt;를 선택하고 Next(다음)를 클릭합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c2380d58c1fd2fb2ea172d6&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;다음 화면에서 FSx for Lustre의 배포 옵션을 확인할 수 있습니다:&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23800fb397f3ed600dc46d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스토리지 유형&lt;/span&gt;: PERSISTENT-SSD 또는 Scratch 스토리지&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380c596e1fda478d1968a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스토리지 단위당 처리량(Throughput per unit of storage)&lt;/span&gt;: 원하는 처리량 설정 가능&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23803ba2f4ec32977dbbb5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메타데이터 IOPS 성능(Metadata IOPS performance)&lt;/span&gt;: 메타데이터 성능 설정 가능&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380e9b5f8ebd7224cb3f8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;압축(Compression)&lt;/span&gt;: 데이터 압축 옵션 설정 가능&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23809cb69bf7e04a05f6e9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 리포지토리 가져오기/내보내기(Data Repository Import/Export)&lt;/span&gt;: S3 연동 버킷을 통해 자동 데이터 가져오기/내보내기 설정 가능&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;707&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Igq6Y/btsNrqEPNvH/teWQbLHr9OaHTTFA8YCaoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Igq6Y/btsNrqEPNvH/teWQbLHr9OaHTTFA8YCaoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Igq6Y/btsNrqEPNvH/teWQbLHr9OaHTTFA8YCaoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIgq6Y%2FbtsNrqEPNvH%2FteWQbLHr9OaHTTFA8YCaoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;813&quot; height=&quot;707&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;707&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1dab8b2c1c238038bb53c02498c83871&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380debd51ff17aeaad9e6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;화면을 종료하려면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Cancel(취소)&lt;/span&gt; 버튼을 클릭하여 FSx 콘솔로 돌아갑니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c23808b914cdeada1a54e1d&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238048958dee8053761276&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4. 기존 FSx for Lustre 인스턴스 세부 정보 확인&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380188de4d5dfca5a3727&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;FSx 콘솔에서 이미 프로비저닝된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1200GiB FSx for Lustre 인스턴스&lt;/span&gt;를 확인할 수 있습니다. 이 인스턴스는 다음과 같은 설정을 갖추고 있습니다:&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380daa257cc82e0c37478&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스토리지 유형&lt;/span&gt;: Persistent-SSD&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23809e99deca289c5e1613&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스토리지 단위당 처리량&lt;/span&gt;: 250MB/s&lt;/li&gt;
&lt;/ul&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380f59290cf257024742e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;File system ID(파일 시스템 ID)를 클릭하여 FSx for Lustre 인스턴스의 세부 정보를 확인합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23802f8b35fdad3b29a651&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;세부 정보 화면에서 다음을 확인할 수 있습니다:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380d6a395d5c73c289303&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;FSx 인스턴스의 상세 설정&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380738f27ceb5b7c75b9e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;온라인으로 업데이트 가능한 항목&lt;/span&gt;:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list roman&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23805ab818d3b3010f880e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Storage Capacity(스토리지 용량)&lt;/span&gt; 업데이트&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23804eb226f2af93c59da8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Throughput per unit of storage(스토리지 단위당 처리량)&lt;/span&gt; 업데이트&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c238051a617ec35b54fb056&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;참고&lt;/span&gt;:&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238022af66c96929615387&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;FSx for Lustre 인스턴스의 스토리지 용량을 증가시키면 스토리지 단위당 처리량 성능도 증가합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c238071abd1f5c512fabc89&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;스토리지 용량을 늘리지 않고도 Throughput Capacity(처리량 용량)를 독립적으로 증가시킬 수 있습니다(예: 추가 스토리지 없이 더 높은 처리량 성능이 필요한 경우).&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1dab8b2c1c2380b8919ce382d505276e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;화면 하단으로 스크롤하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Monitoring &amp;amp; performance(모니터링 및 성능)&lt;/span&gt; 탭을 클릭합니다. 여기에서 다양한 차원의 성능 메트릭을 확인할 수 있습니다:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238040a78ed53a1ace44f1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요약 메트릭(Summary Metrics)&lt;/span&gt;: 용량(Capacity), 처리량(Throughput), IOPS&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380b1a6ecf7e905462882&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;세부 성능 메트릭(Detailed Performance Metrics)&lt;/span&gt;: 메타데이터 성능(Metadata Performance), 네트워크(Network) 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9acvU/btsNsjxW2no/N5RC6LdtOJpurs9fvtLEAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9acvU/btsNsjxW2no/N5RC6LdtOJpurs9fvtLEAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9acvU/btsNsjxW2no/N5RC6LdtOJpurs9fvtLEAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9acvU%2FbtsNsjxW2no%2FN5RC6LdtOJpurs9fvtLEAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;668&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1dab8b2c1c2380a5bdebd5498699cf2d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380e3a99bd34d555dcff2&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380aaaa09e802693b1bb6&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5. 요약&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23801b824dc36b1e24f42c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 모듈을 통해 다음을 학습했습니다:&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238039adc2e013e4ba23e4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;FSx for Lustre의 다양한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;배포 옵션&lt;/span&gt; (PERSISTENT-SSD, Scratch 스토리지, 처리량, 메타데이터 IOPS 등)&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380fca9d7fbf4db46ea5c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;기존 FSx 인스턴스의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스토리지 용량(Storage Capacity)&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;처리량 용량(Throughput Capacity)&lt;/span&gt;, **메타데이터 IOPS 성능(Metadata IOPS performance)**을 온라인으로 증가시킬 수 있는 기능&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380289045fff8d44218bc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;4&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;4&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380d69ee9e0cf28ea4ece&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Deploy Generative AI Chat application&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c2380d78fcec743f62783f0&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.1. 실습 소개&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1dab8b2c1c23806c9217f316a6716662&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 실습에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Kubernetes&lt;/span&gt; 상에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Generative AI 챗봇 애플리케이션&lt;/span&gt;을 구성하고 배포합니다. 이를 위해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon EKS 클러스터&lt;/span&gt;에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM Pod&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;WebUI Pod&lt;/span&gt;를 배포하고, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mistral-7B 모델&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon FSx for Lustre&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon S3&lt;/span&gt;를 사용해 저장 및 접근하며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Inferentia Accelerators&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Generative AI 워크로드&lt;/span&gt;의 가속 컴퓨팅으로 활용합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238022be61c70849fe1acd&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238022ade4f97d416b5ee5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Generative AI와&amp;nbsp;Machine Learning&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c2380ecaa7bf309a86aca10&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Generative AI&lt;/span&gt;와 Machine Learning (ML)은 비즈니스가 운영 및 혁신 방식을 변화시키는 데 도움을 줍니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Generative AI&lt;/span&gt;는 Large Language Models (LLM)을 활용해 텍스트, 이미지, 오디오, 소프트웨어 코드와 같은 새로운 콘텐츠를 프롬프트(prompt)로부터 생성하는 인공지능(AI) 클래스입니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380ac9525ddb5a904eeba&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238011bd5bdbbb58186aa8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Large Language Model (LLM)이란?&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c238086b668f89ebae8277d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Large Language Models (LLM)은 방대한 텍스트 데이터로 훈련되어 자연어의 패턴과 구조를 학습하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Machine Learning&lt;/span&gt; 모델입니다. 이러한 모델은 텍스트 생성, 질문 답변, 언어 번역 등 다양한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Natural Language Processing (NLP)&lt;/span&gt; 작업에 사용됩니다. 이 워크숍에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;7 billion parameters&lt;/span&gt;를 가진 오픈소스 모델인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mistral-7B-Instruct&lt;/span&gt;를 사용합니다. 여기서 &quot;Instruct&quot;는 이 모델이 텍스트 생성뿐만 아니라 다양한 작업을 수행하고 지침을 따르도록 훈련되었음을 의미하며, 이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Chat Applications&lt;/span&gt;에 적합합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23801f9b23ed183f02f667&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23801eb18be9c8f137e28d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM이란?&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238031a725fe81c4f41f78&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;vLLM (Virtual Large Language Model)은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;LLM&lt;/span&gt;의 추론(inference) 및 서빙(serving)을 위한 오픈소스 라이브러리로, 사용이 간편합니다. 이 프레임워크는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mistral-7B-Instruct&lt;/span&gt;와 같은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;LLM&lt;/span&gt; 모델을 배포해 텍스트 생성 추론을 제공하며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;OpenAI API&lt;/span&gt;와 호환되는 API를 제공하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;LLM 애플리케이션&lt;/span&gt; 통합을 용이하게 합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380ff8603eacafb4f0551&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM&lt;/span&gt;의 특징:&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23801e9270e72bedb88d15&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;고속 성능&lt;/span&gt;:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238030910ee1df63dc37fb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;최첨단 서빙 처리량(state-of-the-art serving throughput)&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23803790b4f45b61261cab&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PagedAttention&lt;/span&gt;을 통한 효율적인&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Attention Key/Value Memory&lt;/span&gt;&amp;nbsp;관리&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380f7a965c07adb10a727&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;연속적인 요청 배치 처리(continuous batching)&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c238029b132fa12f60e6f39&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CUDA/HIP Graph&lt;/span&gt;를 활용한 빠른 모델 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1dab8b2c1c238023b3e2d94456f4ceb9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;유연성과 사용 편의성&lt;/span&gt;:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380adac2dd747196159c1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HuggingFace&lt;/span&gt;&amp;nbsp;모델과의 원활한 통합&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c238088be96e3a7a3c256f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;OpenAI-compatible API Server&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23805d8a5ce7ec600eda71&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Prefix Caching&lt;/span&gt;&amp;nbsp;지원&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c238042bf89f4c679708cd4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Neuron&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;NVIDIA GPUs&lt;/span&gt;&amp;nbsp;등 다양한 칩셋 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c238006ba4ac917ee3f02ae&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238016aebcdbd39540fea4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon EKS에서&amp;nbsp;vLLM을 사용해&amp;nbsp;Mistral-7B-Instruct&amp;nbsp;배포&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c2380d788b3c0d88d36168c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;OpenAI-compatible Endpoint&lt;/span&gt;로 텍스트 생성 추론 기능을 제공하기 위해 Amazon Elastic Kubernetes Service (EKS)에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM 프레임워크&lt;/span&gt;를 사용해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mistral-7B-Instruct&lt;/span&gt; 모델을 배포합니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Karpenter&lt;/span&gt;를 활용해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Inferentia2 EC2 노드&lt;/span&gt; (Generative AI용 가속 컴퓨팅)를 생성하고, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Container Image&lt;/span&gt;에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM Pod&lt;/span&gt;를 실행합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23801a8983ca4cd9c99846&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380139666e1138cace9eb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Inferentia Accelerators&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c23808f8e04d598467f88fa&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Inferentia&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS&lt;/span&gt;가 설계한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Machine Learning&lt;/span&gt; 칩으로, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Deep Learning&lt;/span&gt; 및 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Generative AI&lt;/span&gt; 추론 애플리케이션을 가속화합니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Inferentia Accelerators&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon EC2&lt;/span&gt;에서 높은 성능과 최저 비용을 제공하며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TensorFlow&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PyTorch&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;MXNet&lt;/span&gt;과 같은 인기 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Machine Learning Frameworks&lt;/span&gt;를 지원합니다. 특히 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Inferentia2 Accelerators&lt;/span&gt;는 대규모 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Deep Learning 모델&lt;/span&gt; 실행에 최적화되어 있으며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Large Language Models (LLM)&lt;/span&gt; 및 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Latent Diffusion Models&lt;/span&gt;과 같은 복잡한 모델 배포에 적합합니다.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380349de0dd2ac702c92c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Inferentia&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Machine Learning&lt;/span&gt;의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;추론(inference)&lt;/span&gt; 단계를 가속화합니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;추론&lt;/span&gt;은 훈련된 모델을 사용해 새로운 데이터에 대한 예측이나 결정을 내리는 과정으로, 낮은 지연 시간(low latency)과 높은 처리량(high throughput)이 요구되는 실시간 애플리케이션에 중요합니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Inferentia2&lt;/span&gt;는 높은 처리량과 낮은 지연 시간을 제공하며, 각 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Inferentia2 Accelerator&lt;/span&gt;는 두 개의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Second-generation NeuronCores&lt;/span&gt;를 포함하고, 최대 12개의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Inferentia2 Accelerators&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EC2 Inf2 Instance&lt;/span&gt;에 탑재할 수 있습니다. 각 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Inferentia2 Accelerator&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;190 TFLOPS&lt;/span&gt;의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FP16 성능&lt;/span&gt;을 지원하며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;32 GB HBM&lt;/span&gt;을 제공해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Inferentia1&lt;/span&gt; 대비 메모리는 4배, 메모리 대역폭은 10배 증가했습니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238087a1e4f9097090f035&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380b2ae1ef081582a5155&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Neuron SDK&amp;nbsp;-&amp;nbsp;ML Frameworks에 대한 네이티브 지원&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c238070b0cccc2683c855b0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Neuron SDK&lt;/span&gt;는 고성능 및 비용 효율적인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Deep Learning (DL)&lt;/span&gt; 가속화를 가능하게 하는 컴파일러, 런타임, 프로파일링 도구를 포함한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SDK&lt;/span&gt;입니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Neuron SDK&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PyTorch&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TensorFlow&lt;/span&gt;와 같은 인기 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ML Frameworks&lt;/span&gt;와 네이티브로 통합되며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Inferentia Accelerators&lt;/span&gt;에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Deep Learning 모델&lt;/span&gt;을 최적으로 배포할 수 있도록 최소한의 코드 변경과 벤더별 솔루션에 대한 의존성을 줄입니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Neuron&lt;/span&gt;은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Natural Language Processing (NLP)&lt;/span&gt;, 언어 번역, 텍스트 요약, 비디오 및 이미지 생성, 음성 인식, 개인화, 사기 탐지 등 다양한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;추론 애플리케이션&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Inferentia Accelerators&lt;/span&gt;에서 실행할 수 있도록 지원합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23800caa86c212169e2643&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.2. Deploy vLLM on AWS Inferentia nodes for model Inference&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1dab8b2c1c2380798870f50538e0a665&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.2.1. AWS Inferentia 가속기를 위한 Karpenter NodePool 및 EC2 NodeClass 생성&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1dab8b2c1c23807ab3e1d27f3072f629&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Karpenter 설정은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;NodePool&lt;/span&gt; Custom Resource (CR) 형태로 제공됩니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;NodePool&lt;/span&gt;은 Karpenter가 생성할 수 있는 노드와 해당 노드에서 실행될 수 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;에 대한 제약 조건을 설정합니다. 예를 들어, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;NodePool&lt;/span&gt;은 노드 생성을 특정 컴퓨터 아키텍처로 제한하거나 여러 아키텍처를 유연하게 사용할 수 있도록 설정할 수 있습니다. 단일 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Karpenter NodePool&lt;/span&gt;은 다양한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt; 형태를 처리할 수 있습니다. Karpenter는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;의 속성(예: &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Label&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Affinity&lt;/span&gt;)을 기반으로 스케줄링 및 프로비저닝 결정을 내립니다. 클러스터는 여러 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;NodePool&lt;/span&gt;을 가질 수 있지만, 이번에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Inferentia NodePool&lt;/span&gt;을 추가로 선언하겠습니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380eea464d4d1278a4479&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Karpenter NodePool&lt;/span&gt;은 Karpenter가 생성할 수 있는 노드와 해당 노드에서 실행될 수 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;에 대한 제약 조건을 설정합니다. AWS 관련 설정은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;NodeClass&lt;/span&gt;를 통해 구성할 수 있습니다. 여러 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;NodePool&lt;/span&gt;이 동일한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EC2NodeClass&lt;/span&gt;를 참조할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c238070aed6f2338b1684f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Cloud9 터미널에서 작업 디렉토리로 이동&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c238079ae1ed41871598d5c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;cd /home/ec2-user/environment/eks/genai&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23803c9107ce5c16772e26&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;배포할 Karpenter NodePool 정의 확인 AWS Inferentia &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;INF2 Accelerated Compute&lt;/span&gt; 노드용 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;NodePool&lt;/span&gt;을 생성하여 Generative AI 애플리케이션(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM Pod&lt;/span&gt;)을 구동합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c238063a8b2df141aa6a06d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;cat inferentia_nodepool.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23806fa622c1a6a566d2f7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;AWS Inferentia INF2 Accelerated Compute 노드용 Karpenter NodePool 정의 배포&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c23807c839fc4383cfa7bd6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl apply -f inferentia_nodepool.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380c6bef9d718a3923418&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;NodePool 및 EC2NodeClass 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c238096bfe8c033027ccb23&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl get nodepool,ec2nodeclass inferentia

NAME                               NODECLASS    NODES   READY   AGE
nodepool.karpenter.sh/inferentia   inferentia   0       True    7s

NAME                                        READY   AGE
ec2nodeclass.karpenter.k8s.aws/inferentia   True    6s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c238021ac92dd99459666ad&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23809ca840d302d24a1eef&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380efbdc3ce07de9a3fe1&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.2.2. Neuron Device Plugin 및 Scheduler 설치&lt;/span&gt;&lt;/p&gt;
&lt;blockquote id=&quot;block-1dab8b2c1c23806ea062dcbb13971cde&quot; class=&quot;notion-quote&quot; style=&quot;box-sizing: border-box; border-inline-start: var(--quote-border); margin: 0.5rem 0px; padding: 0.1rem 0.9rem; font-size: var(--quote-size); font-family: var(--primary-font);&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;중요: 워크샵 시간을 절약하기 위해 Mistral-7B 모델은 이미 AWS Neuron SDK를 사용해 다운로드 및 컴파일된 상태입니다. 이를 AWS Inferentia Accelerated Compute 노드에 배포할 수 있습니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p id=&quot;block-1dab8b2c1c2380658badc5249864447b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이제 EKS 클러스터에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Neuron Device Plugin&lt;/span&gt;과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Neuron Scheduler&lt;/span&gt;를 설치해야 합니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238041a027cedcc2054d4b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Neuron Device Plugin&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c2380729b9effe948fca80c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Neuron Device Plugin&lt;/span&gt;은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Neuron Core&lt;/span&gt; 및 디바이스를 Kubernetes 리소스로 노출합니다.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23809dba78fa07f1cfeb26&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;다음 명령어를 실행하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Neuron Device Plugin&lt;/span&gt;을 설치합니다 (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kubectl&lt;/span&gt; 경고는 무시하세요):&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23805aabaaffab263256ac&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/aws-neuron/aws-neuron-sdk/master/src/k8/k8s-neuron-device-plugin-rbac.yml
kubectl apply -f https://raw.githubusercontent.com/aws-neuron/aws-neuron-sdk/master/src/k8/k8s-neuron-device-plugin.yml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380e9aeeed48d03eb5330&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Neuron Scheduler&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c23800b907ff7ed956038be&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Neuron Scheduler&lt;/span&gt; 확장은 여러 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Neuron Core&lt;/span&gt; 또는 디바이스 리소스를 요구하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt; 스케줄링에 필요합니다. 이 확장은 비연속적인 코어/디바이스 ID를 가진 노드를 필터링하고, 연속적인 코어/디바이스 ID를 요구하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;에 이를 강제 할당합니다.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380388bdce4138f998a2d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;다음 명령어를 실행하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Neuron Scheduler&lt;/span&gt;를 설치합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380a7b75effa6c89c9f85&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/aws-neuron/aws-neuron-sdk/master/src/k8/k8s-neuron-scheduler-eks.yml
kubectl apply -f https://raw.githubusercontent.com/aws-neuron/aws-neuron-sdk/master/src/k8/my-scheduler.yml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380eba569e66c3af31610&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238071897fe619c498485d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.2.3. vLLM 애플리케이션 Pod 배포&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23803ca5d2d11719b92137&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이제 모델 서빙 및 추론 엔드포인트를 제공할 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM Pod&lt;/span&gt;를 배포합니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM Pod&lt;/span&gt;가 온라인 상태가 되면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mistral-7B&lt;/span&gt; 모델(29GB)을 FSx for Lustre 기반 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volume&lt;/span&gt;에서 메모리로 로드하여 사용 준비를 마칩니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238013af65c00b5c71c95f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;vLLM Pod 배포&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c2380579533e641e92031b1&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;다음 명령어를 실행하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM Pod&lt;/span&gt;를 배포합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380f7803be029dd86df24&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl apply -f mistral-fsxl.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote id=&quot;block-1dab8b2c1c2380bda73ecaa77058b84a&quot; class=&quot;notion-quote&quot; style=&quot;box-sizing: border-box; border-inline-start: var(--quote-border); margin: 0.5rem 0px; padding: 0.1rem 0.9rem; font-size: var(--quote-size); font-family: var(--primary-font);&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;참고: vLLM 배포는 약 7~8분이 소요됩니다. (다음 단계로 진행할 수 있으며, 이 단계가 완료될 때까지 기다릴 필요는 없습니다.)&lt;/span&gt;&lt;/blockquote&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380978018dab64bc0a792&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;vLLM의 mistral-fsxl.yaml 배포 파일 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c2380c68d79fe4e8721f4fe&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;다음 명령어를 실행하여 배포 파일을 확인합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23805eb448e54e37be36f6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;cat mistral-fsxl.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: vllm-mistral-inf2-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: vllm-mistral-inf2-server
  template:
    metadata:
      labels:
        app: vllm-mistral-inf2-server
    spec:
      tolerations:
      - key: &quot;aws.amazon.com/neuron&quot;
        operator: &quot;Exists&quot;
        effect: &quot;NoSchedule&quot;
      containers:
      - name: inference-server
        image: public.ecr.aws/u3r1l1j7/eks-genai:neuronrayvllm-100G-root
        resources:
          requests:
            aws.amazon.com/neuron: 1
          limits:
            aws.amazon.com/neuron: 1
        args:
        - --model=$(MODEL_ID)
        - --enforce-eager
        - --gpu-memory-utilization=0.96
        - --device=neuron
        - --max-num-seqs=4
        - --tensor-parallel-size=2
        - --max-model-len=10240
        - --served-model-name=mistralai/Mistral-7B-Instruct-v0.2-neuron
        env:
        - name: MODEL_ID
          value: /work-dir/Mistral-7B-Instruct-v0.2/
        - name: NEURON_COMPILE_CACHE_URL
          value: /work-dir/Mistral-7B-Instruct-v0.2/neuron-cache/
        - name: PORT
          value: &quot;8000&quot;
        volumeMounts:
        - name: persistent-storage
          mountPath: &quot;/work-dir&quot;
      volumes:
      - name: persistent-storage
        persistentVolumeClaim:
          claimName: fsx-lustre-claim
---
apiVersion: v1
kind: Service
metadata:
  name: vllm-mistral7b-service
spec:
  selector:
    app: vllm-mistral-inf2-server
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8000&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote id=&quot;block-1dab8b2c1c2380269474f3e4a5666a97&quot; class=&quot;notion-quote&quot; style=&quot;box-sizing: border-box; border-inline-start: var(--quote-border); margin: 0.5rem 0px; padding: 0.1rem 0.9rem; font-size: var(--quote-size); font-family: var(--primary-font);&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;참고: 단일 Pod 배포 요청이 포함되어 있으며, AWS Inferentia Neuron Core 요청, 이전에 생성한 PVC(FSx for Lustre, fsx-lustre-claim)를 사용한 영구 스토리지, 그리고 모델 파라미터가 포함되어 있습니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238053969fc525853e771b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;vLLM Pod 생성 모니터링&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c23807483e6cc7e8b8752bf&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;다음 명령어를 주기적으로 실행하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt; 상태가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Running&lt;/span&gt;으로 전환되는지 확인합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380a69edac3f571e0770d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl get po
NAME                                            READY   STATUS              RESTARTS   AGE
kube-ops-view-5d9d967b77-tttmp                  1/1     Running             0          2d11h
vllm-mistral-inf2-deployment-7d886c8cc8-7fsv7   0/1     ContainerCreating   0          20m

# karpenter에 의해서 node가 생성되고 static provisioning된 pv가 pvc에 의해 할당한다
kubectl describ po vllm-mistral-inf2-deployment-7d886c8cc8-7fsv7
...
Events:
  Type     Reason            Age                  From               Message
  ----     ------            ----                 ----               -------
  Normal   Nominated         36s                  karpenter          Pod should schedule on: nodeclaim/inferentia-cn67p
  Warning  FailedScheduling  19s (x5 over 7m27s)  default-scheduler  0/2 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling.
  Warning  FailedScheduling  9s                   default-scheduler  0/3 nodes are available: 1 node(s) had untolerated taint {node.kubernetes.io/not-ready: }, 2 Insufficient aws.amazon.com/neuron. preemption: 0/3 nodes are available: 1 Preemption is not helpful for scheduling, 2 No preemption victims found for incoming pod&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380989c0edd9aa5d0a512&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23805ab7defcf69a87bbea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon EKS 클러스터 콘솔 탐색&lt;/span&gt;&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380d796e0fe9c3ec28327&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Amazon EKS 클러스터 콘솔로 이동합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c238020a80ef36300899d3a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;클러스터 이름(예: eksworkshop)을 클릭합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380458305d9cf5a6665f8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Compute&lt;/span&gt; 탭에서 새로운 AWS Inferentia &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;inf2.xlarge&lt;/span&gt; 컴퓨트 노드가 생성된 것을 확인합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c238093a1a9f80fadcfda9b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;노드 이름을 클릭하면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;inf2.xlarge&lt;/span&gt; 컴퓨트 노드의 용량 할당 및 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt; 세부 정보를 확인할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c23807ab25af032b9a6f26f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380998c56c276f5add92a&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1208px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;143&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8qTFV/btsNskp4wIZ/pidGfMkB9KvtZhka9ckzk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8qTFV/btsNskp4wIZ/pidGfMkB9KvtZhka9ckzk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8qTFV/btsNskp4wIZ/pidGfMkB9KvtZhka9ckzk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8qTFV%2FbtsNskp4wIZ%2FpidGfMkB9KvtZhka9ckzk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;716&quot; height=&quot;80&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;143&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380588019dc8c72381951&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요약&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c2380ef98e1f6bbde460e1c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이제 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM Pod&lt;/span&gt;를 성공적으로 배포했습니다. 다음 랩 섹션으로 진행하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;WebUI Pod&lt;/span&gt;를 배포하고, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mistral-7B&lt;/span&gt; 모델을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM&lt;/span&gt;(모델 서빙 및 추론)을 통해 상호작용할 수 있도록 설정하세요.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380ba9acdfbdff1f252c3&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.3. Deploy WebUI chat application to interact with model&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1dab8b2c1c23804a92f6fa2fe32d8bd4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.3.1. 추론 서비스(Inference Service) 사용 방법&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380d8b7d1c083dc0bc337&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Open WebUI&lt;/span&gt; 애플리케이션을 사용하여 추론 서비스(Inference Service)에 연결할 수 있습니다. 이 애플리케이션은 워크숍에서 배포할 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM-hosted Mistral-7B-Instruct&lt;/span&gt; 모델이 제공하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;OpenAI-compatible endpoint&lt;/span&gt;를 소비하도록 설계되었습니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Open WebUI&lt;/span&gt;는 채팅 기반 인터페이스를 통해 사용자가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;LLM&lt;/span&gt;(Large Language Model)과 상호작용할 수 있게 해줍니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Open WebUI&lt;/span&gt; 애플리케이션을 사용하려면, 애플리케이션 컨테이너를 배포하고 제공된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;WebUI URL&lt;/span&gt;에 연결하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;LLM&lt;/span&gt;과 채팅을 시작하면 됩니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;WebUI&lt;/span&gt; 애플리케이션은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM-hosted Mistral-7B-Instruct&lt;/span&gt; 모델과의 통신을 처리하여 원활한 사용자 경험을 제공합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238088a949d96c779ad16c&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23800093dcd0675ba145f5&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.3.2. Open WebUI Pod 배포 및 로드 밸런서 설정&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23801d911fd7602451ad39&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령어를 실행하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Open WebUI&lt;/span&gt; 애플리케이션 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;를 배포하세요. 이를 통해 이전 단계에서 배포한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM Mistral&lt;/span&gt; 모델과 상호작용할 수 있습니다. 이 명령은 또한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Application Load Balancer&lt;/span&gt;를 배포하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Open WebUI Chat&lt;/span&gt; 사용자 인터페이스를 제공합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23805a9387d5499585ea04&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl apply -f open-webui.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23801a9f64cc0f38c6b507&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23807fa57ee858df52fa68&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.3.3. Open WebUI Chat 인터페이스의 URL 주소 확인&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380d89d2acaa0872a38dc&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령어를 실행하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Open WebUI Chat&lt;/span&gt; 인터페이스의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;URL 주소&lt;/span&gt;를 확인하세요.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380529e40d54a49204157&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl get ing

NAME                 CLASS   HOSTS   ADDRESS                                                     PORTS   AGE
open-webui-ingress   alb     *       open-webui-ingress-1989187441.us-west-2.elb.amazonaws.com   80      22s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23803791f9e20ccf1fceac&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;1~2분 정도 기다린 후( &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Open WebUI&lt;/span&gt; 배포가 완료될 때까지), 위에서 확인한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;URL 주소&lt;/span&gt;를 복사하여 웹 브라우저에 붙여넣으세요. 그러면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Open WebUI&lt;/span&gt; 채팅 클라이언트 인터페이스가 열립니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238089be57fa3757cdd6d4&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23802c81a4fb10816a523e&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.3.4. WebUI 인터페이스 사용&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380ab9087e89006863d58&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;WebUI&lt;/span&gt; 인터페이스 상단 메뉴 바에 있는 드롭다운 메뉴에서 모델을 선택할 수 있습니다. 드롭다운 메뉴에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mistral-7B&lt;/span&gt; 모델을 선택한 후, 새로 배포한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Generative AI Chat&lt;/span&gt; 애플리케이션과 채팅을 시작하세요.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380349c5df97024e5ec96&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;만약 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mistral-7B&lt;/span&gt; 모델이 보이지 않는다면, 상단 드롭다운 선택 메뉴에 모델이 나타날 때까지 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;WebUI&lt;/span&gt; 페이지를 새로고침하세요. (이전 랩 모듈에서 언급했듯이, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vLLM Pod&lt;/span&gt;와 모델이 메모리에 로드되는 데 약 7~8분이 소요됩니다.)&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380c6ae4fcd6770cb9079&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c238067ab19f6da060a60eb&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQW1lW/btsNscsildT/xocs4rbfcCugbbhujv3zd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQW1lW/btsNscsildT/xocs4rbfcCugbbhujv3zd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQW1lW/btsNscsildT/xocs4rbfcCugbbhujv3zd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQW1lW%2FbtsNscsildT%2Fxocs4rbfcCugbbhujv3zd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;739&quot; height=&quot;442&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380c2bb2ac1e3e7a14d9c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.3.5. 완료&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380c3aea3ea768c42477c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이제 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon EKS&lt;/span&gt;에서 컨테이너화된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Generative AI Chatbot&lt;/span&gt; 애플리케이션을 성공적으로 배포했습니다. 이 애플리케이션은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon FSx Lustre&lt;/span&gt;에 캐싱된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Mistral-7B&lt;/span&gt; 모델을 사용하며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;AWS Inferentia Accelerators&lt;/span&gt;로 구동됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23804a94fde813d39ff76c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;4&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;4&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380579902eca78422fc73&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Inspect Mistral-7B data, and share &amp;amp; replicate generated data assets&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c2380e8b576f59f9457216d&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.1. 실습 소개&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1dab8b2c1c23801dbac8ed113f10caed&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 실습에서는 vLLM Pod에 로그인하여 Persistent Volume에 저장된 Mistral 모델 데이터 구조를 확인합니다.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380e78bf2d57ad70f37d0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;vLLM Pod에 로그인함으로써 FSx Lustre 파일 시스템으로 지원되는 Persistent Volume을 통해 S3 버킷에 저장된 모든 데이터에 접근하고 확인하는 방법을 알 수 있습니다.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23807e8c9cf543fb04cc3a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;모델이나 훈련 데이터(Training Data)를 S3 버킷에 저장하고 이를 다른 지역(예: 재해 복구(DR) 또는 다른 팀의 분산 액세스)에 있는 EKS 클러스터와 공유하거나, Pod에서 생성된 자산(Generated Assets)을 공유해야 하는 시나리오를 상상해 보세요.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23809b9edcf0f9d303529d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 랩 섹션에서는 EKS Pod의 Persistent Volume(FSx for Lustre로 지원됨)에 테스트 파일을 생성하고, 이 파일이 S3 버킷으로 자동으로 내보내지는 과정을 확인합니다. 또한, 설정할 S3 복제(S3 Replication)를 통해 테스트 파일이 우리가 제공한 다른 대상 AWS 리전(us-east-2)의 S3 버킷으로 자동으로 복제되는 모습을 볼 수 있습니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380b29831d91d728b0caf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;정보&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23800bb902e9cf3d9ab1d5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;하나의 Persistent Volume Claim을 여러 Pod와 공유한다!!&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c2380e39220e6b737f9d4d5&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;수많은 AI 모델이나 방대한 훈련 데이터 세트(Training Data-Sets)를 호스팅해야 하며, 이를 워크로드의 수많은 Pod에서 액세스해야 하는 시나리오를 상상해 보세요. 이러한 데이터를 FSx for Lustre로 지원되는 단일 Persistent Volume(PV)과 Persistent Volume Claim(PVC)에 저장할 수 있습니다. 이를 통해 각 Pod마다 개별 로컬 스토리지 볼륨(Local Storage Volumes)을 생성하는 대신, 중앙 집중식 고성능 모델/데이터 캐시 위치(Centralized High-Performance Model/Data Cache Location)를 만들어 애플리케이션 Pod에 서비스를 제공할 수 있습니다. 이는 로컬 볼륨 간 데이터 중복의 비효율성을 제거하고, 새로운 Pod를 시작할 때 데이터를 각 로컬 볼륨으로 복사하는 데 따른 대기 시간을 줄이는 데 도움이 됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c238067910ecab228fa8113&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.2. Configure S3 Cross-Region Replication for your S3-linked FSx for Lustre Instance&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1dab8b2c1c2380eaa969c1a89cb82d76&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;여기서는 Amazon S3 Cross Region Replication 설정 한다!!&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380e990dbd9ac200a5629&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.2.1. Amazon S3 콘솔로 이동&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380c49bbdf5e870a4f5c2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon S3 콘솔&lt;/span&gt;을 엽니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380339205e2a2265305ab&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;사용자의 리전에서 생성된 S3 버킷(예: fsx-lustre-bucket-xxxx)을 선택합니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;주의&lt;/span&gt;: 이름에 2ndregion이 포함된 버킷(예: fsx-lustre-bucket-2ndregion-xxxx)은 선택하지 마세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ewsj29/btsNsaOMF2Z/g6uMuKP6JH8AAdVvb6aV8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ewsj29/btsNsaOMF2Z/g6uMuKP6JH8AAdVvb6aV8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ewsj29/btsNsaOMF2Z/g6uMuKP6JH8AAdVvb6aV8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fewsj29%2FbtsNsaOMF2Z%2Fg6uMuKP6JH8AAdVvb6aV8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;874&quot; height=&quot;295&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1dab8b2c1c2380c0a424e357652be4ff&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23807ab828f33f686813c7&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.2.2. Replication Rule 생성&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238036aad2d5af50e2ff3c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;선택한 S3 버킷 페이지에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Management&lt;/span&gt; 탭으로 이동합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23800e84f7d585875698f7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Replication rules&lt;/span&gt; 섹션으로 스크롤하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Create replication rule&lt;/span&gt; 버튼을 클릭합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQj2b8/btsNragwm1m/ni1eBiNC1Y2617XELPOUvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQj2b8/btsNragwm1m/ni1eBiNC1Y2617XELPOUvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQj2b8/btsNragwm1m/ni1eBiNC1Y2617XELPOUvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQj2b8%2FbtsNragwm1m%2Fni1eBiNC1Y2617XELPOUvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;909&quot; height=&quot;386&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;386&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1dab8b2c1c238043ab11e36225b30f05&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380efaf88e9944ab447eb&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.2.3. Bucket Versioning 활성화 및 Rule 설정&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238039bf76cc940247bd26&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;화면 상단의 빨간색 팝업 창에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Enable Bucket Versioning&lt;/span&gt;을 클릭하여 버킷 버전 관리를 활성화합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380aa9d8ad60ac6c738ac&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Rule name&lt;/span&gt; 필드에 나중에 식별할 수 있는 이름을 입력합니다(예: my-replication-rule).&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c238083b7ecc82dffe42dcc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Status&lt;/span&gt;는 기본적으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Enabled&lt;/span&gt;로 설정되어 있는지 확인합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c23804faea7dc44f38062a3&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380ffb9efce8a25ac5d32&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;317&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9GGQs/btsNrwLCCNM/bStDaqYKeh6O0sb5bkKKdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9GGQs/btsNrwLCCNM/bStDaqYKeh6O0sb5bkKKdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9GGQs/btsNrwLCCNM/bStDaqYKeh6O0sb5bkKKdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9GGQs%2FbtsNrwLCCNM%2FbStDaqYKeh6O0sb5bkKKdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;589&quot; height=&quot;317&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;317&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238084b40fc85e16dc3306&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.2.4. Source Bucket 설정&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238047a5ffd84673e03381&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Source bucket&lt;/span&gt; 섹션에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Limit the scope of this rule using one or more filters&lt;/span&gt; 옵션을 선택합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c238014b309e033739e3e55&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;필터 값으로 test/를 입력하여 해당 접두사를 가진 객체에만 복제를 적용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c23803ebf03e622e3531e8c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380918f4ec8f75f902120&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOBTJo/btsNsdks7d4/rOcZyRtntle1K6pOKyewS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOBTJo/btsNsdks7d4/rOcZyRtntle1K6pOKyewS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOBTJo/btsNsdks7d4/rOcZyRtntle1K6pOKyewS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOBTJo%2FbtsNsdks7d4%2FrOcZyRtntle1K6pOKyewS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;768&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380ea91ace7daa302d859&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.2.5. Destination Bucket 설정&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23807c81bdd97a3dbfae57&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Destination&lt;/span&gt; 섹션에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Browse S3&lt;/span&gt;를 클릭합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380519ad7ff95ec13de7e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;대상 리전(us-east-2)에 생성된 S3 버킷(예: fsx-lustre-bucket-2ndregion-xxxx)을 선택한 후 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Choose path&lt;/span&gt;를 클릭합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23804a9f7ff9d990750e4e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;대상 버킷에서도 빨간색 팝업 창이 나타나면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Enable Bucket Versioning&lt;/span&gt;을 클릭하여 버전 관리를 활성화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c23809ea963c740cb217f90&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380c5bf2ac491ef0ca6ed&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;361&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mia9D/btsNsjdB9WV/nsaL3ECxavTg6f7oOeE43k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mia9D/btsNsjdB9WV/nsaL3ECxavTg6f7oOeE43k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mia9D/btsNsjdB9WV/nsaL3ECxavTg6f7oOeE43k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmia9D%2FbtsNsjdB9WV%2FnsaL3ECxavTg6f7oOeE43k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;361&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;361&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380d398b3e8d62d49cc97&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.2.6. IAM Role 설정&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23804ca742c398841e4433&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Amazon S3가 객체를 복제할 수 있도록 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IAM Role&lt;/span&gt;을 설정합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380948b80dcef75d2f705&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;미리 생성된 역할(이름이 s3-cross-region-replication-role로 시작)을 선택합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c238045a432f9945c068117&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23806d9800d66e5c336e7b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcz0by/btsNsQotEGg/pOIl3gYW8sVEP2Ll9KOVSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcz0by/btsNsQotEGg/pOIl3gYW8sVEP2Ll9KOVSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcz0by/btsNsQotEGg/pOIl3gYW8sVEP2Ll9KOVSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcz0by%2FbtsNsQotEGg%2FpOIl3gYW8sVEP2Ll9KOVSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;245&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238030a5aad27c122e5843&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.2.7. Encryption 설정&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380f58392c9ce5b147b92&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Encryption&lt;/span&gt; 섹션에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Replicate objects encrypted with AWS KMS&lt;/span&gt;를 선택합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23803a8b0bca6d5a7fa5f7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Available AWS KMS keys&lt;/span&gt;에서 표시된 유일한 KMS 키를 선택합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c23802383f0eca132d4cbce&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23807b8fc1cd5d1950bf28&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;515&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tB1Ai/btsNsTL2AyS/5BiqDmY1HP8XuyiaDdhFRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tB1Ai/btsNsTL2AyS/5BiqDmY1HP8XuyiaDdhFRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tB1Ai/btsNsTL2AyS/5BiqDmY1HP8XuyiaDdhFRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtB1Ai%2FbtsNsTL2AyS%2F5BiqDmY1HP8XuyiaDdhFRk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;515&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;515&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238086994bc328dcf790ab&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.2.8. 설정 저장&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380fdb957de64a9967d5e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;나머지 옵션은 기본값으로 유지합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23805b90caeb9f91e66f18&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Save&lt;/span&gt; 버튼을 클릭하여 설정을 저장합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c2380b2b352df09b1faa020&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380f397a7ca51a5c5cfcf&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1182&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE7JiT/btsNsR8wQD3/zFiJcbSEwq8XznYXirzRUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bE7JiT/btsNsR8wQD3/zFiJcbSEwq8XznYXirzRUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bE7JiT/btsNsR8wQD3/zFiJcbSEwq8XznYXirzRUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbE7JiT%2FbtsNsR8wQD3%2FzFiJcbSEwq8XznYXirzRUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1182&quot; height=&quot;570&quot; data-origin-width=&quot;1182&quot; data-origin-height=&quot;570&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23806091e2c804d8630b87&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.2.9. 기존 객체 복제 여부 선택&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380429b0cde1ffca58eb0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;기존 객체 복제 여부를 묻는 팝업이 나타나면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;No, do not replicate existing objects&lt;/span&gt;를 선택하고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Submit&lt;/span&gt;을 클릭합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c2380848932f2e33c8619b7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c238022b828ee1b242c1515&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;613&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKLmVe/btsNr6EE2Rc/BRicmuBzh7bcsxBVJ3uAM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKLmVe/btsNr6EE2Rc/BRicmuBzh7bcsxBVJ3uAM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKLmVe/btsNr6EE2Rc/BRicmuBzh7bcsxBVJ3uAM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKLmVe%2FbtsNr6EE2Rc%2FBRicmuBzh7bcsxBVJ3uAM1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;613&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;613&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380088576c739cb1b9765&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.2.10. 설정 확인&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238056a37ce25aeb738b52&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;설정이 완료되면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;S3 replication rules&lt;/span&gt; 페이지로 돌아갑니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380d4b6a5f21dcf7c015b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;새로 생성된 복제 규칙이 성공적으로 표시되는지 확인합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1dab8b2c1c238034af60e27465524aeb&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1264px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238034a17cc8aa09dd9fa8&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요약&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c238058ba3af0b7ac054f69&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 과정을 통해 두 개의 S3 버킷 간 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Cross Region Replication&lt;/span&gt; 규칙을 성공적으로 설정했습니다. 다음 단계에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volume&lt;/span&gt;에 마운트된 Pod에서 테스트 데이터를 생성하고, 생성된 데이터가 대상 S3 버킷으로 원활하게 복사되는 과정을 확인할 수 있습니다. Amazon S3의 네이티브 복제 기능은 데이터 공유 및 컨테이너화된 워크로드의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DR/BCP&lt;/span&gt;(재해 복구/비즈니스 연속성 계획) 전략에 유용하게 활용될 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c238011a549ceaf63d05dc0&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.3. Inspect Mistral-7B data, generate test file in Pod to enable auto-export and replication of data&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1dab8b2c1c238064bcbae0d546cb049c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 섹션에서는 Pod에 로그인하여 Mistral-7B 모델 데이터를 검사하고, 공유 및 복제될 테스트 파일을 생성합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238048b1e8f68f93905e64&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238050bacfd055e66b3976&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.3.1. Pod에 로그인, 모델 데이터 검사, 복제용 테스트 파일 생성&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23800b8e4efa9cb9672747&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Cloud9 터미널로 돌아가 작업 디렉토리로 이동합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380378136ddf8445fab97&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;cd /home/ec2-user/environment/eks/FSxL&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23806d9d8fc7fc7d2c5329&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이제 vLLM Pod에 로그인합니다. 먼저 아래 명령어를 실행하여 Pod 이름을 확인합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23809ebc20c2e801f69037&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl get pods
NAME                                            READY   STATUS    RESTARTS   AGE
kube-ops-view-5d9d967b77-tttmp                  1/1     Running   0          2d12h
open-webui-deployment-5d7ff94bc9-kf6jk          1/1     Running   0          40m
vllm-mistral-inf2-deployment-7d886c8cc8-7fsv7   1/1     Running   0          66m&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380e4a920d70299af30f0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;출력 결과에서 환경에 표시된 vLLM으로 시작하는 이름을 복사합니다. 복사한 값을 사용하여 아래 명령어를 실행하여 vLLM Pod에 로그인합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380869cece477170875c5&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl exec -it &amp;lt;YOUR-vLLM-POD-NAME&amp;gt; -- bash&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238080883adb02ad32d24b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;다음 명령어를 실행합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380efa46eff5cee18d944&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;oot@vllm-mistral-inf2-deployment-7d886c8cc8-7fsv7:~# df -h
Filesystem                 Size  Used Avail Use% Mounted on
overlay                    100G   23G   78G  23% /
tmpfs                       64M     0   64M   0% /dev
tmpfs                      7.7G     0  7.7G   0% /sys/fs/cgroup
10.0.58.250@tcp:/bietbb4v  1.2T   28G  1.1T   3% /work-dir
/dev/nvme0n1p1             100G   23G   78G  23% /etc/hosts
shm                         64M     0   64M   0% /dev/shm
tmpfs                       15G   12K   15G   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs                      7.7G     0  7.7G   0% /proc/acpi
tmpfs                      7.7G     0  7.7G   0% /sys/firmware&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380d9bba2de9760044117&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;work-dir은 Persistent Volume Claim(FSx for Lustre 파일 시스템으로 지원됨)의 마운트 위치입니다.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23800fa567d484ba1ba51e&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 Persistent Volume에 저장된 내용을 검사해봅시다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380c0b742f50651ac16cb&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;cd /work-dir/
ls -ll
total 297
drwxr-xr-x 5 root root  33280 Apr 16 20:07 Mistral-7B-Instruct-v0.2
-rw-r--r-- 1 root root 147482 Apr 16 20:09 sysprep&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23803383dec5fe3356a952&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Mistral-7B 모델이 여기에 저장되어 있음을 확인할 수 있습니다. 모델 데이터 구조를 살펴봅시다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238018ac95f54f5a3fa6fd&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;cd Mistral-7B-Instruct-v0.2/
ls -ll
total 2550
drwxr-xr-x 3 root root   33280 Apr 16 20:07 -split
-rwxr-xr-x 1 root root    5471 Apr 16 19:42 README.md
-rwxr-xr-x 1 root root     596 Apr 16 19:42 config.json
-rwxr-xr-x 1 root root     111 Apr 16 19:42 generation_config.json
-rwxr-xr-x 1 root root   25125 Apr 16 19:42 model.safetensors.index.json
drwxr-xr-x 3 root root   33280 Apr 16 20:07 neuron-cache
-rwxr-xr-x 1 root root   23950 Apr 16 19:42 pytorch_model.bin.index.json
-rwxr-xr-x 1 root root     414 Apr 16 19:42 special_tokens_map.json
-rwxr-xr-x 1 root root 1795188 Apr 16 19:42 tokenizer.json
-rwxr-xr-x 1 root root  493443 Apr 16 19:42 tokenizer.model
-rwxr-xr-x 1 root root    2103 Apr 16 19:42 tokenizer_config.json&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23806fa5dbfdc8ae0387c7&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;다음으로, Persistent Volume(FSx for Lustre로 지원됨)에 테스트 파일을 생성합니다. 여기서 FSx for Lustre의 새로운/변경된 파일을 Amazon S3로 자동 내보내기 기능과 S3 버킷 간 복제를 확인할 수 있습니다. vLLM Pod에서 생성한 파일은 us-east-2 지역의 대상 S3 버킷으로 원활하게 복사됩니다. 이 데이터는 기존 환경에서 사용하거나 DR(재해 복구) 시나리오에서 Amazon EKS 클러스터, Pod, FSx Lustre 인스턴스를 자동으로 실행하여 복제된 데이터를 소비하는 데 사용할 수 있습니다.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c238060af28cf5f75c830f7&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;test라는 새 폴더 아래 testfile이라는 테스트 파일을 생성하여 FSx 인스턴스와 연결된 S3 버킷으로 테스트 파일의 내보내기를 트리거하고, S3 Replication을 통해 us-east-2 지역의 대상 S3 버킷으로 테스트 파일을 복제합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23808ca51bdc6671268c26&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;cd /work-dir
mkdir test
cd test
cp /work-dir/Mistral-7B-Instruct-v0.2/README.md /work-dir/test/testfile
ls -ll /work-dir/test&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380779ff9f27adecafee9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23805da46dd8b3f8b5aa95&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.3.2. S3 버킷으로 데이터 내보내기 및 지역 간 복제 확인&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23807a9d34c6c3bb0e86bd&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Amazon S3 Console 페이지로 이동합니다: &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://s3.console.aws.amazon.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Amazon S3 console&lt;/a&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380c29071d3c387e22309&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;사용자의 지역에 있는 S3 버킷(FSx 인스턴스와 연결된 버킷)을 클릭합니다. 이름에 2ndregion이 포함된 S3 버킷은 클릭하지 마세요.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238065be5dd8603b519039&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjM6qV/btsNsNrMtIZ/VfeiYKl73vw5efXME3vqwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjM6qV/btsNsNrMtIZ/VfeiYKl73vw5efXME3vqwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjM6qV/btsNsNrMtIZ/VfeiYKl73vw5efXME3vqwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjM6qV%2FbtsNsNrMtIZ%2FVfeiYKl73vw5efXME3vqwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;874&quot; height=&quot;295&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1dab8b2c1c2380318c31d33793b5f622&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;test 폴더가 존재함을 확인할 수 있습니다. test 폴더를 클릭하면 Pod의 Persistent Volume에서 생성한 testfile이 FSx for Lustre 파일 시스템에서 S3 버킷으로 자동 내보내기된 것을 볼 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23802bba45d12ec001afea&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJz3kX/btsNrYHSe9d/hKvSMLzRug7cgTpFIWgKBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJz3kX/btsNrYHSe9d/hKvSMLzRug7cgTpFIWgKBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJz3kX/btsNrYHSe9d/hKvSMLzRug7cgTpFIWgKBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJz3kX%2FbtsNrYHSe9d%2FhKvSMLzRug7cgTpFIWgKBK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;326&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;326&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;block-1dab8b2c1c238055ac38de4f0e7c351a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이제 다른 AWS 지역(us-east-2)에 있는 대상 S3 버킷으로 이동하여 이 testfile이 자동으로 복제되었는지 확인합니다.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23800fb160d07acc623d20&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;창 상단의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Buckets&lt;/span&gt; 하이퍼링크를 클릭합니다.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380109515fab71a7b5458&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이름에 2ndregion이 포함된 S3 버킷을 클릭합니다. 이 버킷은 us-east-2에 위치하며, test 폴더와 testfile이 S3 Replication에 의해 자동으로 복제되었음을 확인할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238023ad7febe261123c4f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c238083a0adc3eb71efd4ff&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cx5HbS/btsNspYYiy6/z9ofZWSYOTF7DYkzNnLpmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cx5HbS/btsNspYYiy6/z9ofZWSYOTF7DYkzNnLpmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cx5HbS/btsNspYYiy6/z9ofZWSYOTF7DYkzNnLpmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcx5HbS%2FbtsNspYYiy6%2Fz9ofZWSYOTF7DYkzNnLpmK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;902&quot; height=&quot;289&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;289&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380cd93e8c012ef9f644e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c238063b535c3e225a9f9b0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pypke/btsNsiy1VEu/GUgvtv1M3mjzL975Ne1Kbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pypke/btsNsiy1VEu/GUgvtv1M3mjzL975Ne1Kbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pypke/btsNsiy1VEu/GUgvtv1M3mjzL975Ne1Kbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpypke%2FbtsNsiy1VEu%2FGUgvtv1M3mjzL975Ne1Kbk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;376&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;376&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238077a985ee011d71766d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5.3.3. 요약&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c238002a5bdd007ca71360d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 섹션에서는 FSx for Lustre와 Amazon S3로의 자동 가져오기/내보내기 기능을 사용하여 Pod 내에서 생성된 데이터를 공유하고 복제하는 방법을 확인했습니다. 또한 S3 Replication을 통해 S3 버킷 간 데이터를 원활하게 복제하는 방법도 확인했습니다. 이는 분산 데이터 요구사항이나 DR(재해 복구) 시나리오에 유용합니다. 예를 들어, 보조 지역(DR)에 기존 EKS 클러스터가 있는 경우, 복제된 S3 버킷의 데이터를 활용하여 FSx for Lustre 인스턴스를 생성하고, FSx 인스턴스를 사용한 Persistent Volume을 생성한 후, 애플리케이션 Pod를 실행하여 다른 AWS 지역에서 데이터를 원활하게 소비할 수 있습니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23800195befada87001f2b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;정보&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1dab8b2c1c23807ba67de02f8d475af7&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;많은 AI 모델이나 대량의 훈련 데이터셋을 호스팅해야 하며, 이를 수백 개의 Pod에서 액세스해야 하는 시나리오를 상상해보세요. 이 데이터를 FSx for Lustre로 지원되는 단일 Persistent Volume(PV)에 저장할 수 있습니다. 이를 통해 각 Pod에 개별 로컬 스토리지 볼륨을 생성하여 데이터가 중복되거나, Pod가 데이터를 액세스하기 전에 로컬 볼륨으로 데이터를 복사하는 대기 시간이 발생하는 대신, 중앙 집중식 고성능 모델/데이터 캐시 위치를 제공하여 애플리케이션 Pod를 효율적으로 서비스할 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23809190ddcac936249015&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;6&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;6&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380f29974d01438b11064&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Create your own environment for testing Data layer&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c238032ad90c030f6069031&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.1. 실습 소개&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1dab8b2c1c2380a8925be2f0eb76127c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이전 모듈에서 관리자가 미리 생성한 기존 스토리지 인스턴스를 사용하여 정적 프로비저닝(Static Provisioning)을 통해 EKS 클러스터에서 퍼시스턴트 볼륨(Persistent Volume, PV)과 퍼시스턴트 볼륨 클레임(Persistent Volume Claim, PVC)을 생성하는 방법을 배웠습니다. 이 섹션에서는 테스트 환경을 직접 구성하여 포드(Pod)를 배포하고, 사용자가 동적 프로비저닝(Dynamic Provisioning) 기능을 사용하여 주문형 퍼시스턴트 볼륨(PV)과 퍼시스턴트 볼륨 클레임(PVC)을 배포하는 방법을 배웁니다. 이를 통해 백엔드에서 FSx Lustre 인스턴스가 자동으로 생성되며, 관리자의 사전 프로비저닝이 필요 없습니다. 이후 해당 PVC를 포드에 마운트하여 이 랩 섹션에서 테스트를 진행합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380069259c7fee3e38d69&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.2. Use Dynamic Provisioning to deploy a new PV and FSx Lustre instance for testing&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1dab8b2c1c23805884bbf418046cd624&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rArr; 동적 프로비저닝(Dynamic Provisioning)을 사용한 FSx for Lustre 스토리지 설정&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380878766fc6ae82e6a8d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 섹션에서는 CSI 드라이버의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Dynamic Provisioning&lt;/span&gt; 기능을 사용하여 온디맨드 방식으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Persistent Volume(PV)&lt;/span&gt; 및 Persistent Volume Claim(PVC)을 생성하는 방법을 학습합니다. 이를 통해 백엔드에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt; 인스턴스를 자동으로 생성하며, 관리자의 사전 프로비저닝 없이 작업이 가능합니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;StorageClass&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PersistentVolume&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PersistentVolumeClaim&lt;/span&gt; 정의를 생성하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Static Provisioning&lt;/span&gt;과의 차이점을 확인하고, 이 PV를 테스트에 사용합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238056b941e1c2d7dd9683&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380f883fbc247fd8ca6de&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.2.1. StorageClass 정의&lt;/span&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238023b105d4f526427e5a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;환경 변수 설정&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c238025a1cbea3d487e863e&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령어를 Cloud9 터미널에 입력하여 VPC, 서브넷, 보안 그룹 ID를 설정합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380ce82cfc65ae2b5b0b3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;VPC_ID=$(aws eks describe-cluster --name $CLUSTER_NAME --region $AWS_REGION --query &quot;cluster.resourcesVpcConfig.vpcId&quot; --output text)
SUBNET_ID=$(aws eks describe-cluster --name $CLUSTER_NAME --region $AWS_REGION --query &quot;cluster.resourcesVpcConfig.subnetIds[0]&quot; --output text)
SECURITY_GROUP_ID=$(aws ec2 describe-security-groups --filters Name=vpc-id,Values=${VPC_ID} Name=group-name,Values=&quot;FSxLSecurityGroup01&quot; --query &quot;SecurityGroups[*].GroupId&quot; --output text)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238018aca9c44df951f298&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;환경 변수 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c238044870ef4ceb6fd8256&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령어로 서브넷 ID와 보안 그룹 ID를 확인합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380738d1bc415738608de&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;echo $SUBNET_ID
echo $SECURITY_GROUP_ID&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380879d4af26684219484&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;작업 디렉토리 이동&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c23809782d4e75173176e9b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;cd /home/ec2-user/environment/eks/FSxL&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380bb9933c8e887cd0376&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;StorageClass 정의 파일(fsxL-storage-class.yaml)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c2380dbb613cffc284960b4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 파일은 CSI 드라이버가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt;를 동적으로 프로비저닝하기 위한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;StorageClass&lt;/span&gt;를 정의합니다.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380c888bfc3e8a1f0f7a4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;주요 파라미터는 다음과 같습니다:&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23801f8872d7a0824f718b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;subnetId&lt;/span&gt;&amp;nbsp;&amp;ndash; The subnet ID that the Amazon FSx for Lustre file system should be created in. Amazon FSx for Lustre is not supported in all Availability Zones. Open the Amazon FSx for Lustre console at&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;https://console.aws.amazon.com/fsx/&lt;/code&gt;&amp;nbsp;to confirm that the subnet that you want to use is in a supported Availability Zone. The subnet can include your nodes, or can be a different subnet or VPC. If the subnet that you specify is not the same subnet that you have nodes in, then your VPCs must be connected, and you must ensure that you have the necessary ports open in your security groups.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23803e9c3aff815f808ba4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;securityGroupIds&lt;/span&gt;&amp;nbsp;&amp;ndash; The security group ID for your nodes.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23801ca143f3b7d02a1244&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;s3ImportPath&lt;/span&gt;&amp;nbsp;&amp;ndash; The Amazon Simple Storage Service data repository that you want to copy data from to the persistent volume.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23807786a4d341d8f43a8d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;s3ExportPath&lt;/span&gt;&amp;nbsp;&amp;ndash; The Amazon S3 data repository that you want to export new or modified files to.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380ab8c2dd88e38b3b6e2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;deploymentType&lt;/span&gt;&amp;nbsp;&amp;ndash; The file system deployment type. Valid values are SCRATCH_1, SCRATCH_2, and PERSISTENT_1. For more information about deployment types, see Create your Amazon FSx for Lustre file system.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380e28e68ec5041988928&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;autoImportPolicy&lt;/span&gt;&amp;nbsp;- the policy FSx will follow that determines how the filesystem is automatically updated with changes made in the linked data repository. For a list of acceptable policies, please view the&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://docs.aws.amazon.com/fsx/latest/APIReference/API_CreateFileSystemLustreConfiguration.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;official FSx for Lustre documentation&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380e5b82de3cfc9b7c5a2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;perUnitStorageThroughput&lt;/span&gt;&amp;nbsp;- for deployment type PERSISTENT_1, customer can specify the storage throughput. Default: &quot;200&quot;. Note that customer has to specify as a string here like &quot;200&quot; or &quot;100&quot; etc.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c2380249c84cb5b30a2d8f4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238065bfcac5891a8bd161&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 설정한 파라미터는 아래와 같습니다:&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380bf9fded98311495bca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;provisioner&lt;/span&gt;: fsx.csi.aws.com&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c238043aa0dcfe723074331&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;subnetId&lt;/span&gt;: FSx 인스턴스가 배포될 서브넷&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23807caa6cc7209b4530f2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;securityGroupIds&lt;/span&gt;: FSx 인스턴스에 적용될 보안 그룹&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380dfbd2bd075bbd04f7c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;deploymentType&lt;/span&gt;: SCRATCH_2 (임시 데이터용 고성능 파일 시스템)&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380c4b582d69068e0a95f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;fileSystemTypeVersion&lt;/span&gt;: 2.15 (FSx 파일 시스템 버전)&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c238089bfc9c1ab91e038e3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;mountOptions&lt;/span&gt;: flock (파일 잠금 옵션)&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c23807bae86f40176e334dc&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: fsx-lustre-sc
provisioner: fsx.csi.aws.com
parameters:
  subnetId: SUBNET_ID
  securityGroupIds: SECURITY_GROUP_ID
  deploymentType: SCRATCH_2
  fileSystemTypeVersion: &quot;2.15&quot;
mountOptions:
  - flock&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380f0928bf42ad4d296b5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;환경 변수로 값 치환&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c2380f7a9cacea4d9fb0cb2&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령어로 SUBNET_ID와 SECURITY_GROUP_ID를 실제 값으로 치환합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238015ae51c853b9459ecc&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;sed -i'' -e &quot;s/SUBNET_ID/$SUBNET_ID/g&quot; fsxL-storage-class.yaml
sed -i'' -e &quot;s/SECURITY_GROUP_ID/$SECURITY_GROUP_ID/g&quot; fsxL-storage-class.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380b38f5cdac12bcbaae8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;파일 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c2380239c60e1460b69dc01&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;치환된 값을 확인합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238005b74ec8707da3c71d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;cat fsxL-storage-class.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238059b74df697a80522e5&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;참고&lt;/span&gt;: s3ImportPath와 s3ExportPath는 동일한 S3 버킷을 사용해야 하며, s3ImportPath만 지정할 경우 랜덤 경로가 생성됩니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380ee9e99c24e540a1434&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23804c95e8fd773c0755f0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.2.2. StorageClass 생성&lt;/span&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238099b129f140090eb14a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;StorageClass 적용&lt;/span&gt; 아래 명령어로 정의된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;StorageClass&lt;/span&gt;를 생성합니다:&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c23804e9bacebc5c2aff34f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl apply -f fsxL-storage-class.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238081a7e9e451b6a849f8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;StorageClass 확인&lt;/span&gt; 생성된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;StorageClass&lt;/span&gt;를 확인합니다:&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c2380c0859fd4f5132e4135&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl get sc

NAME            PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
fsx-lustre-sc   fsx.csi.aws.com         Delete          Immediate              false                  5s
gp2             kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   false                  2d13h
gp3 (default)   ebs.csi.aws.com         Delete          WaitForFirstConsumer   true                   2d13h&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23803eaa5ae5933b264955&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380a6875cc4bca61e451a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.2.3. Persistent Volume Claim(PVC) 생성&lt;/span&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23800c8ac5f43e17b7702e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PVC 정의 파일(fsxL-dynamic-claim.yaml)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c2380edaf61db0ff928796f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 파일은 1200GiB 용량의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PVC&lt;/span&gt;를 요청하며, 앞서 생성한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;fsx-lustre-sc&lt;/span&gt; StorageClass를 참조합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380f5aa1ad29a9152951a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: fsx-lustre-dynamic-claim
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: fsx-lustre-sc
  resources:
    requests:
      storage: 1200Gi&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380d688d0ece54dcf7919&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PVC 생성&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c2380ca85f2ea6ee16cb2af&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령어로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PVC&lt;/span&gt;를 생성합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380a38f43ef7120c3f0e0&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl apply -f fsxL-dynamic-claim.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380e89caaed85e4351b4a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PVC 상태 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c2380aca70ff24270f373c4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령어로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PVC&lt;/span&gt; 상태를 확인합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238058bbbfed9fcf229396&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl get pvc&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380ffb601d580dc730e99&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;참고&lt;/span&gt;: FSx for Lustre 인스턴스 생성은 약 15분이 소요되며, 이 기간 동안 PVC 상태는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pending&lt;/span&gt;으로 표시됩니다. 상태가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Bound&lt;/span&gt;로 변경될 때까지 기다려야 합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238020b323c748099b203e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380bdb420faf1c157cc56&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.2.4. FSx for Lustre 인스턴스 및 PVC 상태 확인&lt;/span&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380d6b061f4fab731fc5d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PVC 상태 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c2380dc9856de119a5c303f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;약 15분 후, 아래 명령어로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PVC&lt;/span&gt;가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Bound&lt;/span&gt; 상태인지 확인합니다:&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380bfa14cff591a047d3a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl get pvc

NAME                       STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS    VOLUMEATTRIBUTESCLASS   AGE
fsx-lustre-claim           Bound     fsx-pv   1200Gi     RWX                            &amp;lt;unset&amp;gt;                 90m
fsx-lustre-dynamic-claim   Pending                                      fsx-lustre-sc   &amp;lt;unset&amp;gt;                 9s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23802f9ee2c6380437065a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;문제 해결&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c238084a9fbdc1f21666f67&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;ProvisioningFailed 경고가 표시되면 FSx 파일 시스템 생성이 진행 중일 가능성이 높습니다. Amazon FSx 콘솔에서 상태를 확인할 수 있습니다(상태가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Creating&lt;/span&gt;에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Available&lt;/span&gt;로 변경됨).&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238087b6f6c92e73c60928&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c238079b625d7422e0c3442&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.2.5. 요약&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380e88124f77119988747&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 섹션에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Dynamic Provisioning&lt;/span&gt;을 사용하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;StorageClass&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PVC&lt;/span&gt;를 정의하고, S3 버킷과 연결된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt; 파일 시스템 및 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PV&lt;/span&gt;를 성공적으로 생성했습니다. 다음 섹션에서는 이 PV를 활용하여 새로운 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;를 배포하고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt;의 성능 테스트를 수행합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c23805091f0c0b8c08ebc06&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.3. Performance testing&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1dab8b2c1c238005aad8ea164f247448&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 섹션에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt; 파일 시스템의 스토리지 성능과 관련된 중요한 매개변수인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IOPS&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;throughput&lt;/span&gt;, 그리고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;latency&lt;/span&gt;를 살펴봅니다. 이를 위해 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://fio.readthedocs.io/en/latest/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;FIO (Flexible I/O)&lt;/a&gt;라는 널리 사용되는 스토리지 벤치마킹 도구와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://github.com/koct9i/ioping&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;IOping&lt;/a&gt;&lt;/span&gt;이라는 실시간 I/O 지연 시간 모니터링 도구를 사용하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CSI driver&lt;/span&gt;를 통해 프로비저닝된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt; 드라이브의 성능을 테스트합니다. 테스트는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EKS Pod&lt;/span&gt;에서 수행됩니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c238015943ff0b2c0d0bd42&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23805db3abf7d1c4d49c5d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.3.1. Pod 프로비저닝 및 FSx for Lustre에 10GB 스토리지 설정&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380a6a980ce2696a285e9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;테스트용 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;YAML&lt;/span&gt; 파일을 사용하여 프로비저닝하고, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt;에 10GB 스토리지를 설정합니다.&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380d1a929e5547ec83c1f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;작업 디렉토리로 이동&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c2380f1be7ad47c7d07790d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;cd /home/ec2-user/environment/eks/FSxL&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380588688cf628f3d1a5e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;아래 명령어를 실행하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt; 인스턴스의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Availability Zone&lt;/span&gt; (예: &quot;us-west-2c&quot;)을 확인하고 출력된 값을 기록합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c23802cbffec602aa5b4935&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;aws ec2 describe-subnets --subnet-id $SUBNET_ID --region $AWS_REGION | jq .Subnets[0].AvailabilityZone&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380d49d33fc3512109958&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod 배포 설정 파일 수정&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c238099b181d8147d2bffa4&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;vi pod_performance.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23808aa8b3cbc5f741b1fe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;중요&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c23807c9ed4f8aaec683d6f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 단계는 성능 테스트에 매우 중요합니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt; 파일 시스템과 동일한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Availability Zone&lt;/span&gt;에 배포되도록 보장합니다.&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380fbb161f2cd8f912187&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vi 편집기&lt;/span&gt;에서 &amp;ldquo;i&amp;rdquo;를 눌러 편집 모드로 전환합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c23805a8d7aca6a29fb8094&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;nodeSelector&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;topology.kubernetes.io/zone&lt;/span&gt;으로 시작하는 마지막 두 줄의 주석 (#)을 제거하여 활성화합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c2380089e94d5bf1240d1c6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;이전 단계에서 기록한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Availability Zone&lt;/span&gt; (예: us-east-2c)을 해당 줄에 반영합니다.&lt;/li&gt;
&lt;li id=&quot;block-1dab8b2c1c238001836cd3331eae98c4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;편집을 완료한 후 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ESC&lt;/span&gt;를 누르고 :wq를 입력한 뒤 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Enter&lt;/span&gt;를 눌러 저장하고 종료합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4XZBu/btsNrw5X0GY/K5Tg0z2JwIDklqsijdfsCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4XZBu/btsNrw5X0GY/K5Tg0z2JwIDklqsijdfsCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4XZBu/btsNrw5X0GY/K5Tg0z2JwIDklqsijdfsCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4XZBu%2FbtsNrw5X0GY%2FK5Tg0z2JwIDklqsijdfsCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;808&quot; height=&quot;398&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;398&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1dab8b2c1c238078a14cf471efbf3980&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380468e06c514e1b9fc69&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;아래 명령어를 복사하여 실행해 성능 테스트용 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;를 프로비저닝합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c2380b696a3f42b69583936&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl apply -f pod_performance.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380ef970ec32d289173fa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;아래 명령어를 실행하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;의 상태를 확인합니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RUNNING&lt;/span&gt; 상태로 전환되는 데 약 1분이 걸립니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c2380e697e7f6eb5fcccc57&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl get pods&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c2380658155ce9099bd1f90&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;중요&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c238063b5dfcf9c3f6e9332&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt; 이벤트에 아래와 같은 메시지가 표시된다면, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt; 파일 시스템 프로비저닝이 아직 완료되지 않은 것입니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380dea01ee68858180a17&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  25s   default-scheduler  0/2 nodes are available: 2 pod has unbound immediate PersistentVolumeClaims. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380df8e44d96e998a13b2&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 경우 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PVC fsx-lustre-claim&lt;/span&gt;이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pending&lt;/span&gt; 상태인지 확인하고, 최대 15분까지 기다립니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PVC fsx-lustre-claim&lt;/span&gt;이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Bound&lt;/span&gt; 상태로 전환되면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RUNNING&lt;/span&gt; 상태로 변경됩니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380648d1cfcf5b9c9f18d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c23806399eee64a04266861&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.3.2. Container에 로그인하여 FIO 및 IOping 테스트 수행&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380f3a401c6527c91eb54&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 단계에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FIO&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IOping&lt;/span&gt; 유틸리티를 설치하고, 성능 부하 테스트를 실행하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IOPS&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;throughput&lt;/span&gt;를 관찰합니다.&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23804c91b8e5e43d87eb40&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;아래 명령어를 사용하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Container&lt;/span&gt;에 로그인합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c23805097dfc28d85f17bdb&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;kubectl exec -it fsxl-performance  -- bash&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c23805aa246c0703d761b13&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FIO&lt;/span&gt; 및 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IOping&lt;/span&gt; 설치&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c2380b091c0e0fb4016ffba&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;apt-get update
apt-get install fio ioping -y&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238032aa3be2ba3f21b7af&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;아래 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IOping&lt;/span&gt; 명령어를 실행하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt; 파일 시스템의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;latency&lt;/span&gt;를 테스트합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c23801cb6ccfa2392433b81&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;ioping -c 20 .&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380cfae92ce25b2fc58dd&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;평균 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;latency&lt;/span&gt; 값을 기록합니다. 일반적으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;0.5ms (500us)&lt;/span&gt; 미만으로, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt; 파일 시스템의 낮은 지연 시간과 높은 성능을 보여줍니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;407&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwWL8N/btsNsUjTAvJ/Af3oN9lqkr8dvGFrBFsTA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwWL8N/btsNsUjTAvJ/Af3oN9lqkr8dvGFrBFsTA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwWL8N/btsNsUjTAvJ/Af3oN9lqkr8dvGFrBFsTA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwWL8N%2FbtsNsUjTAvJ%2FAf3oN9lqkr8dvGFrBFsTA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;682&quot; height=&quot;407&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;407&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1dab8b2c1c23808faba0dc77dc5bbeee&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238053957af172ecc70e49&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;아래 명령어와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FIO&lt;/span&gt; 명령어를 실행하여 부하 테스트를 수행하고, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Throughput&lt;/span&gt; 값을 기록합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c23809380bcc0baa871d7e1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;mkdir -p /data/performance
cd /data/performance
fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio8gb --bs=1MB --iodepth=64 --size=8G --readwrite=randrw --rwmixread=50 --numjobs=8 --group_reporting --runtime=10&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238044b98bda89efcf7c83&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;중요&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1dab8b2c1c2380629965d0fd5cd5e565&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이번 실습에서는 가장 작은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt; 구성인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1.2TiB&lt;/span&gt;를 배포했으며, 이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;240MB/s&lt;/span&gt;의 기본 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;throughput&lt;/span&gt;을 제공합니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt; 파일 시스템의 크기를 늘리면 기본 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;throughput&lt;/span&gt;도 증가합니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FIO&lt;/span&gt; 테스트 결과에서 빨간색으로 강조된 부분은 평균 읽기 및 쓰기 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;throughput&lt;/span&gt;을 보여줍니다.&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c23805bafa5dd4c7c57b393&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FIO&lt;/span&gt; 테스트에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1MB&lt;/span&gt;의 큰 블록 크기를 사용하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;throughput&lt;/span&gt;을 테스트하며, 작은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EKS Container&lt;/span&gt; 환경에서 50% 읽기/쓰기 혼합, 랜덤 읽기-쓰기 패턴, 8개의 동시 작업을 시뮬레이션합니다.&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c23804bb0d6c2128e76db63&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c238013aacfd723eea4f1de&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;875&quot; data-origin-height=&quot;371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u6qG3/btsNsOqFvu1/IEkNFY7PK5RAOQ97OoT8Zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u6qG3/btsNsOqFvu1/IEkNFY7PK5RAOQ97OoT8Zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u6qG3/btsNsOqFvu1/IEkNFY7PK5RAOQ97OoT8Zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu6qG3%2FbtsNsOqFvu1%2FIEkNFY7PK5RAOQ97OoT8Zk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;875&quot; height=&quot;371&quot; data-origin-width=&quot;875&quot; data-origin-height=&quot;371&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1dab8b2c1c238033923af6323b9a9b5d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pod&lt;/span&gt;에서 로그아웃합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1dab8b2c1c2380a6a413e8449de673ea&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;exit&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1dab8b2c1c2380139ae6d6be19084978&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380cea1cbd922a2a73291&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.3.3. 성능 요약&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380739c31fd85be9974de&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;워크로드가 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt; 파일 시스템에서 얻을 수 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;throughput&lt;/span&gt;과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IOPS&lt;/span&gt;의 구체적인 양은 파일 시스템의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;throughput capacity&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;storage capacity&lt;/span&gt; 구성, 그리고 워크로드의 특성에 따라 달라집니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon FSx for Lustre&lt;/span&gt; 성능에 대한 자세한 정보는 다음 링크를 참조하세요:&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380e2ac71f891893f943a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://aws.amazon.com/fsx/lustre/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Amazon FSx for Lustre performance chart&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1dab8b2c1c2380ed9680d7edc68d579c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1dab8b2c1c2380fbab1ad0102dc0a823&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6.3.4. 요약&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1dab8b2c1c2380139c8ce3625663f9fb&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FIO&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IOping&lt;/span&gt; 도구를 사용하여 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Amazon FSx for Lustre&lt;/span&gt; 파일 시스템의 성능 테스트를 성공적으로 완료했습니다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EKS Pod&lt;/span&gt;에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;FSx for Lustre&lt;/span&gt;에 부하를 가하며 높은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;throughput&lt;/span&gt;과 밀리초 미만의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;latency&lt;/span&gt;를 관찰했습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>AWS</category>
      <author>ManMan</author>
      <guid isPermaLink="true">https://gylee815.tistory.com/30</guid>
      <comments>https://gylee815.tistory.com/30#entry30comment</comments>
      <pubDate>Sun, 20 Apr 2025 01:35:24 +0900</pubDate>
    </item>
    <item>
      <title>[IHOS 1기] 2주차 - Envoy, IstioGateway</title>
      <link>https://gylee815.tistory.com/29</link>
      <description>&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d4b8b2c1c238065911aec361c3ed783&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio&amp;rsquo;s Data Plane: Envoy Proxy&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d7b8b2c1c238072ab80dcd983dfe939&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.1 What is the Envoy proxy?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380458262dd24dc389d99&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;3.1.1. 엔보이 소개&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380cea56be214f71b1b42&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이&lt;/span&gt;는 분산 시스템을 구축할 때 발생하는 어려운 애플리케이션 네트워킹 문제를 해결하고자 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.lyft.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;리프트&lt;/a&gt;가 개발했다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23808493f2fe904924b4a7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이&lt;/span&gt;는 2016년 9월 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;오픈소스&lt;/span&gt; 프로젝트로 공개됐으며, 1년 후인 2017년 9월에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CNCF&lt;/span&gt;에 합류했다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380cb9a38c2123968011d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;C++&lt;/span&gt;&lt;/span&gt;로 작성됐는데, 그 목표는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;성능&lt;/span&gt;을 늘리는 것, 특히 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;높은 부하&lt;/span&gt;에서도&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 더 안정적&lt;/span&gt;이고 결정론적일 수 있도록 만드는 것이었다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238031b996f0eff72d807f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 다음 2가지 중요 원칙에 따라 만들어졌다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238013b3bac0e3204ea1fa&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: var(--color-bg-gray-light); display: flex; margin-top: 2px; margin-bottom: 4px; border-color: var(--color-bg-gray-light); overflow: hidden; padding: var(--callout-padding); border-radius: var(--callout-border-radii); box-shadow: var(--callout-shadow);&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; display: var(--callout-icon-display); position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: var(--color-text-default-light);&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 959.047px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1d7b8b2c1c23803eb58ae0454f241a60&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;에게 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네트워크&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;는 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;투명&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;해야 한다. 네트워크 및 애플리케이션 문제가 발생할 때는 문제의 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;원인을 파악하기 쉬워야&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt; 한다.&lt;/span&gt; &lt;i&gt;The network should be &lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;transparent&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt; to &lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;applications&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;. When &lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;network&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt; and &lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;application&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt; problems do occur it should be &lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;easy&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt; to determine the source of the problem. - Envoy announcement&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380daa49fc9f95710f169&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380aa8ab9eab27fb76ad7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 프록시이므로, 더 나아가기 전에 프록시란 무엇인지 명확히 해야 한다. 앞서 프록시란 클라이언트와 서버 간 통신의 중간에 위치한, 네트워크 아키텍터의 중개 구성 요소라고 언급한 바 있다. 프록시는 중간에 위치함으로써 보안, 프라이버시, 정책 같은 기능을 추가할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23808fa098c32783570580&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380299c04f0f2a74e3524&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvnE6P/btsNsNL3MGn/vFVLI5QQfBwOv71D9ENJWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvnE6P/btsNsNL3MGn/vFVLI5QQfBwOv71D9ENJWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvnE6P/btsNsNL3MGn/vFVLI5QQfBwOv71D9ENJWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvnE6P%2FbtsNsNL3MGn%2FvFVLI5QQfBwOv71D9ENJWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;722&quot; height=&quot;117&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b4bab1dd6a005d9aea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시는 클라이언트가 서비스와 통신할 때 알아야 할 사항을 단순화할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803b89e6c0eaefe4eced&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 서비스가 동일한 인스턴스 집합(클러스터)으로 구현됐고, 각 인스턴스는 일정량의 부하를 처리할 수 있다고 가정해보자.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380bb8db9dc635c717e18&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클라이언트가 이 서비스에 요청할 때 어느 인스턴스 혹은 IP 주소인지 어떻게 알아야 하는가?&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238041ac09febcda627d5e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시가 단일 식별자 혹은 IP주소를 갖고 중간에 위치할 수 있고, 클라이언트는 서비스 인스턴스들과 통신하는 데 프록시를 사용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238061aa82e842374ce304&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 클라이언트가 실제 서비스 인스턴스 배포 방식을 자세히 알지 못하는 상태에서 프록시가 서비스 인스턴스 간에 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;로드 밸런싱을 처리&lt;/span&gt;&lt;/span&gt;하는 것을 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23808c9cf4f79cb799bd5d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 리버스 프록시 유형의 또 다른 기능은 클러스터의 인스턴스 상태를 검사하고 실패하거나 오동작하는 백엔드 인스턴스를 우회하도록 라우팅하는 것이다. 이런 방식으로, 프록시는 클라이언트가 어느 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;백엔드&lt;/span&gt;가 과부화돼 있거나 장애가 발생했는지 파악할 필요가 없도록 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;보호 할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238048ab82c325e6de17da&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238021a7aefec35be0e64d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;454&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb84sI/btsNpwxPf8q/cQTqFYl77xcYD2RXeaPbEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb84sI/btsNpwxPf8q/cQTqFYl77xcYD2RXeaPbEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb84sI/btsNpwxPf8q/cQTqFYl77xcYD2RXeaPbEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb84sI%2FbtsNpwxPf8q%2FcQTqFYl77xcYD2RXeaPbEk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;493&quot; height=&quot;454&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;454&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380ea8242d1620ce4eb6b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 프록시는 특히 서비스 디스커버리, 로드 밸런싱, 헬스 체크 같은 기능을 제공하기 위해 애플리케이션 요청 경로 중간에 삽입할 수 있는 애플리케이션 수준 프록시이지만, 엔보이는 그 이상을 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238022a962fc59822a537e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이전 장에서 이런 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;강화된 기능&lt;/span&gt;&lt;/span&gt; 중 일부를 언급했는데, 이번 장에서 더 자세히 다룰 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380df98f6ce86bdc16069&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 애플리케이션이 다른 서비스와 통신할 때 사용하는 7계층 프로토콜을 이해할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23800d84c4e498a5d92cf8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어, 엔보이는 기본적으로 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;HTTP 1.1, HTTP 2, gRPC&lt;/span&gt; 등을 이해할 수 있고, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;요청 수준 타임아웃, 재시도, 재시도별 타임아웃, 서킷 브레이커와 기타 복원력 기&lt;/span&gt;능 같은 동작을 추가할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380fd8330d402f964ef01&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;커넥션만을 이해하는 기본적인 커넥션 수준(L3/L4) 프록시로는 이와 같은 작업을 수행할 수 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380c19662d5f51dd4275d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238001b6e1dc56c89df3a0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 기본 제공 프로토콜 외에도&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 다양한 프로토콜&lt;/span&gt;&lt;/span&gt;을 이해하도록 확장할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380708675f56de186d031&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;MongoDB, DynamoDB&lt;/span&gt; 같은 데이터베이스용, 심지어는 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;AMQP&lt;/span&gt; 같은 비동기 프로토콜용 필터도 작성돼 왔다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d6914ef5005703012f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션에 투명하게 보이고 신뢰성을 갖추는 것도 중요하지만, 분산 아키텍처에서 일어나고 있는 일을 빠르게 이해할 수 있는 능력도 그만큼 중요하다. 특히 예상대로 작동하지 않을 때는 더욱 그렇다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23800bbbebde352b08ff40&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 애플리케이션 수준 프로토콜을 이해할 수 있고, 애플리케이션 트래픽이 엔보이를 거쳐 흐르는 덕분에 통과하는 요청에 대한 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;텔레메트리를 수집&lt;/span&gt;&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380ba8704cc039682d8a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 요청 처리에 얼마나 시간이 소요되는지, 특정 서비스가 얼마나 많은 요청을 처리하고 있는지(&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;처리량&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;throughput&lt;/span&gt;), &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;서비스의 오류율&lt;/span&gt;은 어느 정도인지 등이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238016b3f9cc1d7d5605a6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380a99076c56c7f26539c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시로서, 엔보이는 애플리케이션 외부에서 동작함으로써 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;개발자가 네트워크 문제를 고려하지 않아도 되도록 설계&lt;/span&gt;&lt;/span&gt;됐다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c8aba7d1723f7edff3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉, 어느 프로그래밍 언어로 작성됐든, 어느 프레임워크를 사용하든 모든 애플리케이션이 이 기능들을 사용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806f910ed8609a15f190&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;게다가 서비스 아키텍처(SOA)가 표준 아키텍처이기는 하지만, 마이크로서비스든, 어떤 언어로 작성된 모놀리스 및 레거시 애플리케이션이든 엔보이는 상관없다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380a0aeaed12c664585d4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이가 이해할 수 있는 프로토콜(HTTP 등)을 사용하는 한, 엔보이의 이점을 누릴 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238044b6cecf3ae881420e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23802f8f8bffb3e9462147&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 매우 다재다응한 프록시로 다양한 역할을 할 수 있다. 클러스터 에지 프록시(진입 지점으로), 서비스의 공유 프록시로, 심지어는 이스티오처럼 서비스별 프록시로도 사용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238013bd98fd99ebdddeb0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오에서는 엔보이 프록시를 서비스 인스턴스당 하나씩 배포해 유연성, 성능, 제어 능력을 높인다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803f8000d40992d7f44c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사이드가 프록시와 에지 프록시를 구현하면 인프라를 운영하고 이해하기가 더 쉬워진다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380f7a105c94f013d0a53&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 서비스 메시의 진입점으로 사용돼 클러스터에 들어오는 트래픽을 완벽히 제어하고 관찰할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380ffaf71df4307f52cdd&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23804db279f6a00e32e5c6&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.1.2 Envoy&amp;rsquo;s core features*&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt; 엔보이의 핵심 기능&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380aa80c8c04fd95ab928&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Envoy concepts as a high level&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380128292e2f33c514c52&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;리스너 Listeners&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238049b24df51ecc609b10&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션이 연결할 수 있는 외부 세계로 포트를 노출한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380ad8d57d467b46e479b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 포트 80에 대한 리스터는 트래픽을 받고, 설정된 동작을 해당 트래픽에 적용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c48f43e9ea635bc4e6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;루트(라우트) Routes&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23809aabbbd65191504034&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;리스너로 들어오는 트래픽을 처리하는 라우팅 규칙,&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380ef916ac9fbdf207ef5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 요청이 들어오고 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;/catalog&lt;/code&gt; 에 일치하면 그 트래픽을 catalog 클러스터로 보내는 식이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380dda91bd100ab23197a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 Cluster&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23809b9ca8ffd1c8cae08a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이가 트래픽을 라우팅할 수 있는 특정 업스트림 서비스, 예를 들어 catalog-v1 과 catalog-v2 는 별도 클러스터일 수 있고,&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238080b328c42f89bd9d6e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;루트는 catalog 서비스의 v1이나 v2로 트래픽을 보내는 방법에 대한 규칙을 지정할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1d7b8b2c1c238007b304c3dceee7dfeb&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&amp;rarr; 이는 엔보이가 L7 트래픽에 수행하는 작업을 개념적으로 설명한 것이다. &lt;/i&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380af8c80e7d89c720d8e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380249329e71ebf24b8d6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 트래픽 방향성을 나타낼 때 다른 프록시와 비슷한 용어를 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23808a8de8f4d31dd3dae4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 트래픽은 다운스트림 시스템에서 리스너로 들어온다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806582b7f4be7338008c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 트래픽은 엔보이의 클러스터 중 하나로 라우팅되며, 클러스터는 트래픽을 업스트림 시스템으로 보내는 역할을 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c2a18ed027555a6e1f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽은 엔보이를 거쳐 다운스트림에서 업스트림으로 흐른다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nc3yn/btsNsoeIpbV/K974ooEQwx7WSfmmk3fxEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nc3yn/btsNsoeIpbV/K974ooEQwx7WSfmmk3fxEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nc3yn/btsNsoeIpbV/K974ooEQwx7WSfmmk3fxEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNc3yn%2FbtsNsoeIpbV%2FK974ooEQwx7WSfmmk3fxEk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;701&quot; height=&quot;337&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1d7b8b2c1c2380ddbd88dbb6e57d350c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380a2b051d7fde2db9d65&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 엔보이가 제공하는 기능을 알아보자.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380dab39efada72a08ccf&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380998f13d05992834265&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;서비스 디스커버리&lt;/u&gt;&lt;/span&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; &lt;/u&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;SERVICE DISCOVERY&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238088803fef505f7ff931&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라이언트 측 서비스 디스커버리&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;client-side service discovery&lt;/span&gt;를 구현하기 위해 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;런타임별로 전용 라이브러리를 사용할 필요 없이&lt;/span&gt;, 엔보이는 서비스 디스커버를 자동으로 수행할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380929140e8902a74642c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이가 간단히 디스커버리 API에서 서비스 엔드포인트를 찾도록 설정하기만 하면, 애플리케이션은 서비스 엔드포인트를 찾는 방법을 몰라도 된다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380ca91c5e0d59c045d43&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;디스커버리 API&lt;/span&gt;는 다른 일반적인 서비스 디스커버리 API(&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;like HashiCorp Consul, Apache ZooKeeper, Netflix Eureka, and so on&lt;/span&gt;)를 래핑하는 데 사용할 수 있는 단순한 REST API 이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23800eaaabda93082c3c42&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 컨트롤 폴레인은 이 API를 기본적으로 구현하고 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23803d98fdd8f36d44ab6d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238053a926ed198e401b9d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 디스커버리&lt;/span&gt; 카탈로그의 업데이트가 궁극적으로는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;일관성을 가질 것이라는 가정에 기반해 설계&lt;/span&gt;됐다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380cb8bcdd19f0dde5709&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 분산 시스템에서는 통신할 모든 서비스의 정확한 상태와 사용 가능 여부를 실시간으로 파악할 수 없다는 것을 의미한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d392c3d5d19f6c2262&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서 우리가 할 수 있는 최선은 당면한 지식을 활용하고, 능동적이고 수동적인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;헬스 체크&lt;/span&gt;를 수행하며,&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 그 결과들이 최선이 아닐 수 있음을 인식&lt;/span&gt;하는 것이다. (최선일 수도 없다)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380d08c75eb02148ceb10&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380ce8d88e22552c90d2c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이&lt;/span&gt;의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 디스커버리 메커니&lt;/span&gt;즘 설정을 조절하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;고수준 리소스&lt;/span&gt;들을 제공함으로써 세부적인 내용 대부분을 추상화한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;535&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFcdUA/btsNsUK06jV/Gs1LGlAKBMqrAak7bQ4UKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFcdUA/btsNsUK06jV/Gs1LGlAKBMqrAak7bQ4UKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFcdUA/btsNsUK06jV/Gs1LGlAKBMqrAak7bQ4UKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFcdUA%2FbtsNsUK06jV%2FGs1LGlAKBMqrAak7bQ4UKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;535&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;535&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380708823d5737291bb38&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23803a8592d4aa994e75e1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;로드 밸런싱&lt;/u&gt;&lt;/span&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; &lt;/u&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;LOAD BALANCING&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380ceb295dd7943b625d2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 애플리케이션이 활용할 수 있는 고급 로드 밸런싱 알고리듬을 여러 가지 구현하고 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23800087cdd33405296dc1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 로드 밸런싱 알고리듬에서 흥미로운 기능 중 하나는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;지역 인식&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;locality-aware&lt;/span&gt; 로드 밸런싱이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e08ab5cc3c13d64954&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 특정 기준을 충족하지 않으면 트래픽이 지역 경계를 넘지 않게 해 트래픽을 더 잘 분산시킬 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380dd8c3ef88efd609e19&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 엔보이는 장애 상황으로 이어지는 것이 아닌 이상, 서비스 간 트래픽을 동일한 지역의 인스턴스로 라우팅되도록 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c782a3f1f39378d8cc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 다음 로드 밸런싱 알고리듬들을 기본적으로 제공한다. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/load_balancers&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e2ab31fed62f8b801c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;랜덤&lt;/span&gt; Random&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803ca8bced0516fa853d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(가중치) &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;라운드 로빈&lt;/span&gt; (Weighted) Round robin&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380cf9de9f3e8b9f4ca66&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;가중치를 적용한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;최소 요청&lt;/span&gt; Weighted, least request&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380478115d5aa6d01928e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;일관된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;해싱&lt;/span&gt; Consistent hashing (sticky) : Ring hash, Maglev&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238057a046e8638cf90f35&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238034b769d0eb4d657361&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;트래픽 및 요청 라우팅&lt;/u&gt;&lt;/span&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; &lt;/u&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;TRAFFIC AND REQUEST ROUTING&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23807fb3f0c0c499cd8f18&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP 1.1과 HTTP 2&lt;/span&gt; 같은 애플리케이션 프로토콜을 이해할 수 있으므로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;정교한 라우팅 규칙&lt;/span&gt;을 사용해 트래픽을 특정 백엔드 클러스터로 보낼 수 있다. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238053a860de383e2109b5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 통해 가상 호스트 매핑과 콘텍스트 경로 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;context-path&lt;/span&gt; 라우팅 같은 기본적인 리버스 프록시 라우팅을 처리할 수 있고, 또한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;헤더 및 우선순위 기반 라우팅, 라우팅 재시도 및 타임아웃, 오류 주입&lt;/span&gt;까지도 수행할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238056b053f0551b488d20&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23801ab76ce1c100c27de8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;트래픽 전환 및 섀도잉 기능&lt;/u&gt;&lt;/span&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; &lt;/u&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;TRAFFIC SHIFTING AND SHADOWING CAPABILITIES&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c9a291d83587ee4bf7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;비율&lt;/span&gt; 기반(즉, 가중치 적용) &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트래픽 분할&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;splitting&lt;/span&gt; / &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;전환&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;shifting&lt;/span&gt; 을 지원한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c3aeb6d899ce2bb2fc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 기능을 활용해 애자일 팀은 카나리 릴리스와 같이 위험을 완화하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CD 기술&lt;/span&gt;을 사용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380988ebfc626910d0a92&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;위험성을 더 작은 유저 풀로 완화하기는 하지만, 카나리 릴리스는 여전히 라이브 사용자 트래픽을 다룬다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380ad88c6f384bfa7792f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23802c9a29de9c9130a3a2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트래픽의 사본&lt;/span&gt;을 만들어 &amp;lsquo;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;보내고 망각하는&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;fire and forget&lt;/span&gt;&amp;rsquo; 방식으로 트래픽을 엔보이 클러스터에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;섀도잉&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;shadowing&lt;/span&gt; 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238089a2b2fc9b9344995b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 섀도잉 기능을 트래픽 분할과 같은 것으로 생각할 수 있지만, 업스트림 클러스터가 보는 요청은 라이브 트래픽의 복사본이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380f3ba13fabf487da35c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서 라이브 운영 환경 트래픽에 영향을 주지 않고 섀도잉한 트래픽을 서비스의 새 버전으로 라우팅할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e08497f4fc426d4b91&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 고객에게 영향을 주지 않고 운영 환경 트래픽으로 서비스 변경 사항을 테스트 할 수 있는 아주 강력한 기능이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238032b011c64f9612e8b9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380d7857cfdab53cc4b85&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;네트워크 복원력&lt;/u&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; NETWORK RESILIENCE&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380cc8c88d4481d416a09&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;에게 특정 종류의 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;복원력&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt; 문제를 맡길 수는 있지만, 그 파라미터를 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;설정하고 잘 조정&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;하는 것은&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 애플리케이션의 책임&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;이라는 점을 유의&lt;/span&gt;해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803e8248c19372689c04&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청 타임아웃&lt;/span&gt;과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청 수준 재시도&lt;/span&gt;(재시도별 타임아웃 포함)을 자동으로 수행할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804b8155f220fbee7b70&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 재시도 동작은 네트워크 불안정이 간간히 요청에 영향을 줄 때 매우 유용한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238059886ff0be44562756&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;반면에 재시도 증폭은 연쇄 장애로 이어질 수 있어 엔보이에서는 재시도 동작을 제한할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238079b51acb1511a1b2d6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;애플리케이션 수준 재시도는 여전히 필요할 수 있으며 엔보이가 완전히 대체할 수 없다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e18c31fdf3433765af&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;게다가 엔보이가 업스트림 클러스터를 호출할 때 진행 중인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;커넥션 혹은 요청의 개수를 제한&lt;/span&gt;하고, 그&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 임계값을 넘어서는 것은 빠르게 실패&lt;/span&gt;시키도록 설정 할 수 있다. (임계값에는 지터 jitter 가 있을 수 있다).&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238027baa6cd9b3b4bf1c5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마지막으로 엔보이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서킷 브레이커&lt;/span&gt;처럼 동작하는, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이상값 감지&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;outlier detection&lt;/span&gt; 를 수행해 오동작하는 엔드포인트를 로드 밸런싱 풀에서 제거할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380ddaf9af70341023669&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380f78f90e8c45524e05e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;HTTP/2 AND gRPC&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d6bdc5fda8210d38da&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;HTTP/2 는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;단일 커넥션&lt;/span&gt;에서 여러 요청을 처리하고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서버 푸시, 스트리밍, 요청 백프레셔 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;backpressure&lt;/span&gt; 를 지원하도록 HTTP 프로토콜을 크게 개선한 버전이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23809c835dc741b4abe46c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 처음부터 HTTP/1.1 과 HTTP/2 프록시로 개발돼 다운스트림과 업스트림 모두에게 각 프로토콜을 프록시할 수 있다. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23801d833fc7e3d43e506c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를테면 엔보이는 HTTP/1.1 커넥션을 받아 HTTP/2로 프록시하거나 그 반대도 가능하며, HTTP/2를 받아 업스트림 HTTP/2 클러스터로 프록시 할 수도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804995abe3533a278f8c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;gRPC는 HTTP/2 위에서 구글 프로토콜 버퍼 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Protobur&lt;/span&gt; 를 사용하는 RPC 프로토콜로, 역시 엔보이가 기본적으로 지원한다. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/other_protocols/other_protocols&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d7a42dcdd59789b1a0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 강력하지만 제대로 구현하기 어려운 기능이며 다른 서비스 프록시와 엔보이를 차별화한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23806089c7def21a8c4de6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380409d50d14419859b87&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;메트릭 수집을 통한 관찰 가능성&lt;/u&gt;&lt;/span&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; &lt;/u&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;OBSERVABILITY WITH METRICS COLLECTION&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238031af4bfef3c801391a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 목표 중 하나는 네트워크를 이해할 수 있게 만드는 것이다. 이 목표를 위해 엔보이는 다양한 메트릭을 수집한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23802aafa2fb0307d63913&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 서버에 호출하는 다운스트림 시스템, 서버 그 자체, 서버가 요청을 보내는 업스트림 클러스터에 대한 여러 측면(디멘션 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;dimentsion&lt;/span&gt;) 을 추척한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238041b598dcbd90eb2436&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 통계는 카운터, 게이지, 히스토그램으로 추적된다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23809b87c6cd09f68a829d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 표는 업스트림 클러스터에 대해 추적하는 통계 유형의 몇 가지 예시를 나열한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;notion-table__wrapper&quot; style=&quot;box-sizing: border-box; overflow-x: auto;&quot;&gt;
&lt;table class=&quot;notion-table col-header&quot; style=&quot;margin: 8px 0px 18px; border-collapse: collapse;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;
&lt;tr style=&quot;box-sizing: border-box; background-color: var(--color-bg-gray); color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 390.875px; max-width: 390.875px; background: var(--color-color-default);&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;통계&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 526px; max-width: 526px; background: var(--color-color-default);&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;설명&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 390.875px; max-width: 390.875px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;downstream_cx_total&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 526px; max-width: 526px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;총 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;커넥션&lt;/span&gt; 개수 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Total connections&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 390.875px; max-width: 390.875px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;downstream_&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;cx_http1_active&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 526px; max-width: 526px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;총 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;활성&lt;/span&gt; HTTP/&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1.1&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;커넥션&lt;/span&gt; 개수 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Total active HTTP/1.1 connections&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 390.875px; max-width: 390.875px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;downstream_&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;rq_http2_total&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 526px; max-width: 526px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;총 HTTP/&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요청&lt;/span&gt; 개수 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Total HTTP/2 requests&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 390.875px; max-width: 390.875px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;cluster&lt;/span&gt;.&amp;lt;name&amp;gt;.upstream_cx_&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;overflow&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 526px; max-width: 526px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;클러스터의 커넥션 서킷 브레이커가 임계값을 넘겨 발동한 횟수 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Total number of times that the cluster&amp;rsquo;s connection circuit breaker overflowed&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 390.875px; max-width: 390.875px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;cluster.&amp;lt;name&amp;gt;.upstream_&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;rq_retry&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 526px; max-width: 526px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;총 요청 재시도 횟수 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Total number of request retries&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 390.875px; max-width: 390.875px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;cluster.&amp;lt;name&amp;gt;.&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ejections_detected_consecutive_5xx&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 526px; max-width: 526px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;5xx 오류가 계속돼 퇴출된 횟수 (시행되지 않은 경우도 포함) &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Number of detected consecutive 5xx ejections (even if unenforced)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380c68c61db770111011d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23805dae45ef36a6db22c1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;설정 가능한 어댑터와 형식을 사용해 통계&lt;/span&gt;를 내보낼 수 있다. 기본적으로 지원하는 목록은 아래와 같다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238086a478c27f9f8a37ac&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;StatsD&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238030b9eee3faffd902d5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Datadog; DogStatsD&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380449778f384be10e5ee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Hystrix formatting&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238041a778c54d790db94d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Generic metrics service&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23800bbbd1fb688e2255f1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380f48095ef93b180cba8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;분산 트레이싱을 통한 관찰 가능성&lt;/u&gt;&lt;/span&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; &lt;/u&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;OBSERVABILITY WITH DISTRIBUTED TRACING&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380de873aebb887af7acb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트레이스 스팬&lt;/span&gt;을 오픈트레이싱 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;OpenTracing&lt;/span&gt; 엔진에 보고해 호출 그래프 내 트래픽 흐름, 홉, 지연 시간을 시각화할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c19165da0837411ef8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;특별한 오픈트레이싱 라이브러리를 설치할 필요가 없다&lt;/span&gt;.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380f9a2a0d06e291f7af6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;한편 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필요한 집킨 헤더를 전파하는 것은 애플리케이션의 역할&lt;/span&gt;&lt;/span&gt;이며, 이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;가벼운 래퍼 wrapper 라이브러리로 수행&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380f7bbf1d6f545d462d0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 서비스 간 호출을 연관시킬 목적으로 x-request-id 헤더를 생성하며, 트레이싱이 시작될 때 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;initial &lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;x-b3*&lt;/span&gt;&lt;/code&gt; 헤더를 만들 수도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b39ecdd82087e64ab6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션이 전파해야 하는 헤더는 다음과 같다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380628495df1a5d3200a1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-traceid&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23808a905fedbcd061e277&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-spanid&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380bdba18da7aeaaa77c4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-parentspanid&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380a2a3edfc368d8abc4d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-sampled&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380939b09dadaa045ec73&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;x-b3-flags&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23806ca41fee78379c4558&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380a68eb1e49ad83d6a4f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;자동 TLS 종료 및 시작&lt;/u&gt;&lt;/span&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; &lt;/u&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;AUTOMATIC TLS TERMINATION AND ORIGINATION&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d79b0fcb48ef2ba476&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 특정 서비스로 향하는 TLS 트래픽을 종료 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;terminate&lt;/span&gt; 시킬 수 있다. 클러스터의 에지와 서비스 메시 내부의 프록시 모두에서 가능하다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238084bef4ed5e3f1994a9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;더 흥미로운 기능은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션 대신 엔보이가 업스트림 클러스터로 TLS 트래픽을 시작할 수도 있다&lt;/span&gt;는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803fafced8d29939dda1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔터프라이즈 개발자와 운영자가 언어별 설정과 키스토어 또는 트러스터 스토어를 만지작거리지 않아도 된다&lt;/span&gt;&lt;/span&gt;.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238084bce7d20ccdd75970&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청 경로에 엔보이가 있으면 TLS, 심지어 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;mTLS&lt;/span&gt; 까지도 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자동&lt;/span&gt;으로 얻을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380cd8ee7d3028d84a8a0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380858d7af9e0c53e506b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;속도 제한&lt;/u&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; RATE LIMITING&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e3bea7cb656f72cce5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;복원력이 중요한 측면은 보호받는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;리소스로의 접근을 차단하거나 제한&lt;/span&gt;할 수 있는 기능이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380dcb4a6ddb4baeefea2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;데이터베이스나 캐시, 공유 서비스 같은 리소스들은 다음과 같은 여러 이유로 보호받을 수 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238096bce1ebe71d2e2d6e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;호출 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;call&lt;/span&gt; 비용이 비쌈 (실행 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;invocation&lt;/span&gt; 당 비용)&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b6b8eec1de093fe0b6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지연 시간이 길거나 예측 불가능&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803ebaebc8a60872f08e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기아 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;starvation&lt;/span&gt; 를 방지하기 위해 공정성 알고리듬이 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380f5b7cdfb963310ccda&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23809ab486f4781a4dc05f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;특히 서비스가 재시도하도록 설정한 경우에 시스템 내에서 특정 장애의 영향이 과도하게 확대되는 것을 원하지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c8b0cef86c5a6a5380&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 시나리오에서 요청을 제한하는 데 전역 속도 제한 서비스를 사용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238098824cc3bcd4b29705&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 네트워크(커넥션별)와 HTTP(요청별) 수준 모두에서 속도 제한 서비스와 통합할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238055928fd43b4ad04e5b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380ada04cdeeacd6e8c40&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;엔보이 확장하기&lt;/u&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; EXTENDING ENVOY&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238027b3edc2462c9a7846&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 핵심은 프로토콜(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;7계층&lt;/span&gt;) 코덱(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;filter&lt;/span&gt; 라고 부름)을 구축할 수 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;바이트 처리 엔진&lt;/span&gt;이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23800ea694fa9c3aac0016&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이에서는 추가 필터를 구축하는 것을 주요 사용 사례로 삼고 있으며, 이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필요에 맞게 엔보이를 확장&lt;/span&gt;할 수 있는 흥미로운 방법이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380f69e7aef2b4eed456f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터는 C++로 작성돼 엔보이의 바이너리로 컴파일&lt;/span&gt;된다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c7b85de3a6983bea43&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 엔보이는 루아 Lua 스크립트와 웹어셈블리 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Wasm, WebAssembly&lt;/span&gt;를 지원하므로 덜 침습적인 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;invasive&lt;/span&gt; 방법으로도 엔보이 기능을 확장할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380888c28edf8eb9b03fe&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23802aab1ee5ca19759b4b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23803b9707d76f5baed2f5&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.1.3 Comparing Envoy to other proxies&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt; 엔보이와 다른 프록시 비교&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804ba96cff4c66e4fb7f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 장점은 애플리케이션이나 서비스 프록시 역할을 한다는 데 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23807a8a5ae23a46016f6d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시를 이용해 애플리케이션 간 통신을 원활하게 하며, 신뢰성 및 관찰 가능성 문제를 해결한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238074923ede3e23318312&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다른 프록시들은 로드 밸런서/웹 서버로 시작해 더 기능이 많고 성능이 뛰어난 프록시로 진화했다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238037b542e4336323cd1b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 커뮤니티 중 일부는 발전 속도가 느리거나 오픈소스가 아니어서 애플리케이션 간 통신에서 사용할 수 있을 만틈 발전하는 데 오랜 시간이 걸렸다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380899a0aee417ee53d7a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이가 다른 프록시에 비해 특히 뛰어난 영역은 아래와 같다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23802d8b13f7e5c7c1c4fd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;웹어셈블리를 통한 확장성 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Extensibility with WebAssembly&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238031ac6cf93c2b84532e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;공개 커뮤니팅 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Open community&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380328094e254c119aa9c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;유지 보수 및 확장이 용이하도록 구축한 모듈식 코드베이스 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Modular codebase built for maintenance and extension&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380fbb7dcc8014be76223&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;HTTP/2 지원 (업스트림 및 다운스트림) &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;HTTP/2 support (upstream and downstream)&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238054b8d2df4ddf77ed64&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;심층 프로토콜 메트릭 수집&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Deep protocol metrics collection&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380078575ee222e3f66d3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;C++/가비지 수집 없음&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;C++ / non-garbage-collected&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23809bb2ecf3b0f126827f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;동적 설정으로 핫 리스타트가 필요 없음 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Dynamic configuration, no need for hot restarts&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238022bc53f436dad72699&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d7b8b2c1c2380fe9dcdc0f0ff6f0dc6&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;For a more specific and detailed comparison, see the following:&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804c85fbd2ba922b4a3e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Envoy documentation and comparison: &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://bit.ly/2U2g7zb&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;http://bit.ly/2U2g7zb&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806aa9fbdbd8a3e8cd86&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Turbine Labs&amp;rsquo; switch from Nginx to Envoy: &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://bit.ly/2nn4tPr&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;http://bit.ly/2nn4tPr&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380beb924d5ff7c29577d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Cindy Sridharan&amp;rsquo;s initial take on Envoy: &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://bit.ly/2OqbMkR&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;http://bit.ly/2OqbMkR&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23809091c5f0b6fba5c1c7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Why Ambassador chose Envoy over HAProxy and Nginx: &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://bit.ly/2OVbsvz&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;http://bit.ly/2OVbsvz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380689b30d50df15a2d92&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380148895c00b4388e530&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380a2838aff0f37017444&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.2 Configuring Envoy&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380ebbcbee89bf6710533&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;3.2.1. 들어가며&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b8aed1ce1d5de2fdec&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;JSON/YAML&lt;/span&gt; 형식 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;설정 파일&lt;/span&gt;로 구동된다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380048bcad65318e416e8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;설정 파일은 리스너, 루트, 클러스터뿐 아니라 Admin API 활성화 여부, 액세스 로그 저장 위치, 트레이싱 엔진 설정 등 서버별 설정도 지정한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804a994ac7fb01858b4b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이나 엔보이 설정에 이미 친숙하다면 엔보이 설정에는 여러 버전이 있다는 사실도 알 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e7a606fd9b622c589d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;초기 버전인 v1 과 v2 는 v3 로 대체돼 더 이상 사용하지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380eb8106ec3f553c3ec1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 책에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;v3 설정&lt;/span&gt;만을 살펴볼 것인데, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;최신 버전이자 이스티오가 사용하는 버전&lt;/span&gt;이기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380a39e14ebc2d25ee8e4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 v3 설정 API는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;gRPC&lt;/span&gt;를 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806bb8a1c741b9c833b7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 및 v3 API 구현자들은 API 호출 시 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;스트리밍 기능&lt;/span&gt;을 사용해 엔보이 프록시가 올바른 설정으로 수렴하는 데 걸리는 시간을 줄 일 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380208c2cfa288a574ef4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실제로 이렇게 하면, 프록시가 주기적으로 폴링하는 대신 서버가 업데이트를 엔보이에 푸시할 수 있어 API를 폴링할 필요가 없어진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380429db0f211b3b53b81&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380fa8061e6ed4c99fcc9&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.2.2 Static configuration&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt; 정적 설정&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e38d12e0ef18e750ba&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 설정 파일을 이용해 리스너, 라우팅 규칙, 클러스터를 지정할 수 있다. 아래는 간단한 엔보이 설정이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238043a7fad45b8152ece1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;static_resources:
  listeners: # (1) 리스너 정의
  - name: httpbin-demo
    address:
      socket_address: { address: 0.0.0.0, port_value: 15001 }
    filter_chains:
    - filters:
      - name:  envoy.filters.network.http_connection_manager # (2) HTTP 필터
        typed_config:
          &quot;@type&quot;: type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          stat_prefix: ingress_http
          http_filters:
          - name: envoy.filters.http.router
          route_config: # (3) 라우팅 규칙
            name: httpbin_local_route
            virtual_hosts:
            - name: httpbin_local_service
              domains: [&quot;*&quot;] # (4) 와일드카드 가상 호스트
              routes:
              - match: { prefix: &quot;/&quot; }
                route:
                  auto_host_rewrite: true
                  cluster: httpbin_service # (5) 클러스터로 라우팅
  clusters:
    - name: httpbin_service # (6) 업스트림 클러스터
      connect_timeout: 5s
      type: LOGICAL_DNS
      dns_lookup_family: V4_ONLY
      lb_policy: ROUND_ROBIN
      load_assignment:
        cluster_name: httpbin
        endpoints:
        - lb_endpoints:
          - endpoint:
              address:
                socket_address:
                  address: httpbin
                  port_value: 8000
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238061af1ce9c5bb05529b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380138aa3d8fbcfd3b456&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 간단한 엔보이 설정 파일은&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 15001 포트&lt;/span&gt;에 소켓을 열고 필터 체인을 붙이는 리스너를 선언한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23801b97e1fbb570c6c92d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;필터는 엔보이의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;http_connection_manager&lt;/span&gt;에 라우팅 지시문을 설정한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380eca18dc3f24cee4444&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 예제의 간단한 라우팅 지시문은 와일드카드(*)로 모든 가상 호스트를 매칭하는 것으로, 모든 트래픽을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;httpbin_service &lt;/span&gt;클러스터로 라우팅한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380a299a0dc2565dec4a1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;설정의 마지막 부분은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;httpbin_service &lt;/span&gt;클러스터에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;커넥션 속성&lt;/span&gt;을 정의한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238070b5ebeefee1f80679&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 예제는 업스트림 httpbin 서비스와 통신할 때 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔드포인트 서비스 디스커버리&lt;/span&gt;에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;LOGICAL_DNS&lt;/span&gt; 를,&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 로드 밸런싱 알고리듬&lt;/span&gt;으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ROUND_ROBIN&lt;/span&gt; 을 사용하도록 지정한다. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/v1.19.0/intro/arch_overview/upstream/service_discovery#arch-overview-service-discovery-types-logical-dns&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380ecb440c9f708922291&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b89049f8b2315a3f1c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 설정 파일은 들어오는 트래픽이 연결할 수 있는 리스너를 만들고, 모든 트래픽을 httpbin 클러스터로 라우팅한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d5bffee8dddef71d1c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 사용할 로드 밸런싱 설정과 커넥션 타임아웃 종류도 지정한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380cab08ef124d463994f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 프록시를 호출하면 요청이 httpbin 서비스로 라우팅될 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380178370da79eec956db&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380adbf12d9bf78a6c221&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;많은 설정들이 명시적으로 지정돼 있음을 유의하자. 이 예시는 완전히 정적인 설정 파일이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806380efd55eafd770d9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞 절에서 엔보이는 다양한 설정을 동적으로 설정할 수 있다는 점을 언급했다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e2ba30d202a03b6dc5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 실습을 진행할 때는 정적 설정을 사용하겠지만, 먼저 동적 서비스를 살펴보고 엔보이가 어떻게 xDS API를 이용해 동적 설정을 하는지 알아본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380879322fb6e5208d14e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380f494d3e49ca4ec891d&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.2.3. Dynamic configuration&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt; 동적 설정&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380238599e1dc37981ab4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 특정 API군을 사용해 다운타임이나 재시작 없이 설정을 실시간으로 업데이트할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380faad59f66b6642e82b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;올바른 디스커버리 서비스 API를 가리키는 간단한 부트스트랩 설정 파일만 있으면 나머지 설정은 동적으로 이뤄진다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380759dc8e7490f4e7263&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 동적 설정에 다음과 같은 API를 사용한다(아래 API들을 xDS라고 부름). - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.anyflow.net/sw-engineer/istio-internals-by-xds&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23808588b7c941ac350ee2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이가 자신이 어떤 리스너를 노출해야 한느지 쿼리할 수 있게 하는 API&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380bbb56ed6a2be46cc0b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;리스너 설정의 일부로, 사용할 루트를 지정한다. 정적 설정이나 동적 설정을 사용할 때 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;LDS의 부분집합이다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380fca0e1d93701a5619a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이가 클러스터 목록과 각 클러스터용 설정을 찾을 수 있는 API&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380789768f14184a833e9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 설정의 일부로, 특정 클러스터에 어떤 엔드포인트를 사용해야 하는지 지정한다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CDS의 부분집합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380f9850ac391f9ddc482&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인증서를 배부하는 데 사용하는 API&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804093bad8da700408d9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;나머지 API에 대한 모든 변경 사항을 직렬화된 스트림으로 제공한다. 이 API 하나로 모든 변경 사항을 순차적으로 가져올 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23802ca0cdd602544ce3eb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Listener&lt;/span&gt; discovery service (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;LDS&lt;/span&gt;)&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380649997f5827f834c40&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Route&lt;/span&gt; discovery service (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;RDS&lt;/span&gt;)&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238012999dd2d391b92901&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Cluster&lt;/span&gt; discovery service (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CDS&lt;/span&gt;)&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238055976cca098d6e94c1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Endpoint&lt;/span&gt; discovery service (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EDS&lt;/span&gt;)&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380559f80fd9d3dbdec73&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Secret&lt;/span&gt; discovery service (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SDS&lt;/span&gt;)&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803b8ae1c0a34c946ab0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Aggregate&lt;/span&gt; discovery service (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ADS&lt;/span&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380c898d5f8728a2fbf6a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380238403fcda2184c57c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 API들을 통틀어 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;xDS 서비스&lt;/span&gt;라고 부른다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238063b975c54b48d36af2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이들 중 하나 이상을 조합해 설정할 수 있으며, 전부 사용해야만 하는 것은 아니다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238057b73ac254d6f5964e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;한 가지 유념해야 할 점은 엔보이의 xDS API는 궁극적 일관성 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;eventual consistency&lt;/span&gt; 을 전제로 구축됐으며 궁극적으로는 올바른 구성으로 수렴한다는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380fd892af51c75f0fbca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 엔보이가 트래픽을 클러스터 foo로 라우팅하는 새 루트가 RDS로 업데이트됐는데, 이 클러스터 foo를 포함한 CDS 업데이트는 아직 수행되지 않았을 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238040a57ccf5afa29b205&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 경우 CDS가 업데이트될 때까지 RDS로 설정된 새 route에 대해서 보낼곳이 없으므로 라우팅 오류가 발생할 수 있다. &amp;rarr; ADS의 필요성이 발생!!&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;489&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GyUuc/btsNsPpAGLD/TZGhR6Kh9yGwl8KCAe2ak1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GyUuc/btsNsPpAGLD/TZGhR6Kh9yGwl8KCAe2ak1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GyUuc/btsNsPpAGLD/TZGhR6Kh9yGwl8KCAe2ak1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGyUuc%2FbtsNsPpAGLD%2FTZGhR6Kh9yGwl8KCAe2ak1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;489&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;489&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380bf9b93f9be18442902&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b8ad62cc98606c5d99&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 순서에 따른 경쟁 상태 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;race condition&lt;/span&gt; 를 해결하기 위해 도입한 것이 ADS 이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238008a1bcf7ebf396c6c7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오는 프록시 설정 변경을 위해 ADS를 구현한다. &amp;rarr; Aggregate Discover Service&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380408deef20a7c0760b5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;간단히 말해서 xDS관련된 API를 한번에 Aggregate하여 요청한다는 개념!&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l6Ygc/btsNrn9cLLS/BfYAXa1PhjR7rfs8aJMhT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l6Ygc/btsNrn9cLLS/BfYAXa1PhjR7rfs8aJMhT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l6Ygc/btsNrn9cLLS/BfYAXa1PhjR7rfs8aJMhT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl6Ygc%2FbtsNrn9cLLS%2FBfYAXa1PhjR7rfs8aJMhT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;486&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1d7b8b2c1c2380cc97bafc42db5cd79b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N6ns6/btsNsSGpfCs/e0lI9K3KufzEBp9MgFuZlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N6ns6/btsNsSGpfCs/e0lI9K3KufzEBp9MgFuZlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N6ns6/btsNsSGpfCs/e0lI9K3KufzEBp9MgFuZlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN6ns6%2FbtsNsSGpfCs%2Fe0lI9K3KufzEBp9MgFuZlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;444&quot; height=&quot;364&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;364&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;div id=&quot;block-1d7b8b2c1c23806fa04cfc87b1c7bb2a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23802f852fcd8f6640c1db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 엔보이 프록시의 리스너를 동적으로 찾으려면 다음과 같은 설정을 사용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23801b9be3d9af924d4f18&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;dynamic_resources:
  lds_config: # Configuration for listeners (LDS) 리스너용 설정
    api_config_source:
      api_type: GRPC
      grpc_services:
        - envoy_grpc: # Go to this cluster for the listener API. 이 클러스터로 이동해 리스너 API를 확인하자
            cluster_name: xds_cluster

clusters: 
- name: xds_cluster # gRPC cluster that implements LDS. LDS를 구현하는 gRPC 클러스터
  connect_timeout: 0.25s
  type: STATIC
  lb_policy: ROUND_ROBIN
  http2_protocol_options: {}
  hosts: [{ socket_address: {
    address: 127.0.0.3, port_value: 5678 }}]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380cea5d1c293fe7b9368&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 설정을 사용하면 설정 파일에 각 리스너를 명시적으로 설정하지 않아도 되며, 엔보이에게 LDS API를 사용해 런타임에 올바른 리스너 설정값을 찾으라고 지시하고 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803d987cf8f9c4b876a8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇지만 클러스터 하나는 명시적으로 설정하고 있는데, LDS API가 위치한 클러스터다. (이 예제에서는 xds_cluster로 명명했다)&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380998b47ec794361a18c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380deb018eb461d1ab9fb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;좀 더 구체적인 예를 들면, 이스티오는 서비스 프록시용으로 다음과 같이 부트스트랩 설정을 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380e5bba5f2ecb769d9c0&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;bootstrap:
  dynamicResources:
    ldsConfig:
      ads: {} # ADS for listeners 리스너용 ADS
    cdsConfig:
      ads: {} # ADS for clusters 클러스터용 ADS
    adsConfig:
      apiType: GRPC
      grpcServices:
      - envoyGrpc:
          clusterName: xds-grpc # Uses a cluster named xds-grpc 라는 클러스터를 사용
      refreshDelay: 1.000s

  staticResources:
    clusters:
    - name: xds-grpc # Defines the xds-grpc cluster 라는 클러스터를 정의
      type: STRICT_DNS
      connectTimeout: 10.000s
      hosts:
      - socketAddress:
          address: istio-pilot.istio-system
          portValue: 15010
      circuitBreakers: # Reliability and circuit-breaking settings 신뢰성 및 서킷 브레이커 설정
        thresholds:
        - maxConnections: 100000
          maxPendingRequests: 100000
          maxRequests: 100000
        - priority: HIGH
          maxConnections: 100000
          maxPendingRequests: 100000
          maxRequests: 100000
      http2ProtocolOptions: {}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380c386a9f9b31c123b0a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380de81a5dda3e24b71c9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;간단한 정적 엔보이 설정 파일을 수정해서 엔보이가 작동하는 모습을 살펴보자&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380abb2a9cc20b13c4f88&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380fbb11debc220346a3c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238061bbf1e2e84573a8e4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.3 Envoy in action (실습)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c238043a976e78925c7595c&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.1.1. 기본 실습&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380ba9964ccb0f2b99b46&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 C++로 작성돼 플랫폼에 맞게 컴파일 된다. 엔보이를 시작하기 가장 좋은 방법은 도커를 사용해 컨테이너를 실행하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380a78a56d281e707fe00&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;도커 이미지 가져오기 : citizenstig/httpbin 는 arm CPU 미지원 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://hub.docker.com/r/citizenstig/httpbin/tags&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238060bbafd1da0cd70f60&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;properties&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 도커 이미지 가져오기
docker pull envoyproxy/envoy:v1.19.0
docker pull curlimages/curl
docker pull mccutchen/go-httpbin
docker pull citizenstig/httpbin

# 확인
docker images&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238045ae73c0370217cf9d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23801bb361f7eab50df6b6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;간단한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;httpbin&lt;/span&gt; 서비스 만들어보자. 기본적으로 httpbin은 호출하는 엔드포인트에 따라 호출할 때 사용한 헤더를 반환하거나, HTTP 요청을 지연시키거나, 오류를 발생시키는 등의 서비스를 제공한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803490d6d5ec8d1e4fe9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://httpbin.org/headers&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;http://httpbin.org/headers&lt;/a&gt; 로 이동해보자. httpbin 서비스를 시작하면, 그 다음에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이&lt;/span&gt;를 시작하고 모든 트래픽이 httpbin 서비스로 가도록 프록시를 설정할 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23805c8031ef20826ea433&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러고 나서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클라이언트 앱&lt;/span&gt;을 시작해 프록시를 호출할 것이다. 아래 그림은 이 예제의 아키텍처를 단순화한 것을 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23801eb352dd753af53acb&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380f290a8c687eba339a6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;171&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSl3yR/btsNsmVtlq2/NykirYzFngyJqm3xHXhIj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSl3yR/btsNsmVtlq2/NykirYzFngyJqm3xHXhIj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSl3yR/btsNsmVtlq2/NykirYzFngyJqm3xHXhIj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSl3yR%2FbtsNsmVtlq2%2FNykirYzFngyJqm3xHXhIj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;442&quot; height=&quot;171&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;171&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380828434faa8f32733c7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;httpbin 서비스 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238030bc0bc0e3dfd4738f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;applescript&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# mccutchen/go-httpbin 는 기본 8080 포트여서, 책 실습에 맞게 8000으로 변경
# docker run -d -e PORT=8000 --name httpbin mccutchen/go-httpbin -p 8000:8000
docker run -d -e PORT=8000 --name httpbin mccutchen/go-httpbin 
docker ps

# curl 컨테이너로 httpbin 호출 확인
docker run -it --rm --link httpbin curlimages/curl curl -X GET http://httpbin:8000/headers
{
  &quot;headers&quot;: {
    &quot;Accept&quot;: [
      &quot;*/*&quot;
    ],
    &quot;Host&quot;: [
      &quot;httpbin:8000&quot;
    ],
    &quot;User-Agent&quot;: [
      &quot;curl/8.13.0&quot;
    ]
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806dac1ac83de9b54391&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;/headers 엔드포인트를 호출하는데 사용한 헤더가 함께 반환된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23807fb216f01b2936ac1e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380ff9ca6cc06ebf0c6aa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 엔보이 프록시를 실행하고 help 를 전달해 플래그와 명령줄 파라미터 중 일부를 살펴보자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238058b77dfaa2ae6aad65&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;applescript&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
docker run -it --rm envoyproxy/envoy:v1.19.0 envoy --help
...
   --service-zone &amp;lt;string&amp;gt; # 프록시를 배포할 가용 영역을 지정
     Zone name

   --service-node &amp;lt;string&amp;gt; # 프록시에 고유한 이름 부여
     Node name
     
...
   -c &amp;lt;string&amp;gt;,  --config-path &amp;lt;string&amp;gt; # 설정 파일을 전달
     Path to configuration file&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238044ab36fdb36481aa7f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b3a50cec58980ea15a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 실행 : 프록시를 실행하려고 했지만 유효한 설정 파일을 전달하지 않았다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238064870bfa4cc7a34f52&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;markdown&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
docker run -it --rm envoyproxy/envoy:v1.19.0 envoy
[2025-04-18 15:52:44.495][1][info][main] [source/server/server.cc:338] initializing epoch 0 (base id=0, hot restart version=11.120)
[2025-04-18 15:52:44.495][1][info][main] [source/server/server.cc:340] statically linked extensions:
[2025-04-18 15:52:44.495][1][info][main] [source/server/server.cc:342]   envoy.matching.common_inputs: envoy.matching.common_inputs.environment_variable
[2025-04-18 15:52:44.495][1][info][main] [source/server/server.cc:342]   envoy.thrift_proxy.protocols: auto, binary, binary/non-strict, compact, twitter
[2025-04-18 15:52:44.495][1][info][main] [source/server/server.cc:342]   envoy.guarddog_actions: envoy.watchdog.abort_action, envoy.watchdog.profile_action
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238075900ce2ab77566f51&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23808899cac3542eecfa69&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 수정하고 앞서 봤던 예제 설정 파일을 전달해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380309f94f6ec579ada1b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;admin:
  address:
    socket_address: { address: 0.0.0.0, port_value: 15000 }

static_resources:
  listeners:
  - name: httpbin-demo
    address:
      socket_address: { address: 0.0.0.0, port_value: 15001 }
    filter_chains:
    - filters:
      - name:  envoy.filters.network.http_connection_manager
        typed_config:
          &quot;@type&quot;: type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          stat_prefix: ingress_http
          http_filters:
          - name: envoy.filters.http.router
          route_config:
            name: httpbin_local_route
            virtual_hosts:
            - name: httpbin_local_service
              domains: [&quot;*&quot;]
              routes:
              - match: { prefix: &quot;/&quot; }
                route:
                  auto_host_rewrite: true
                  cluster: httpbin_service
  clusters:
    - name: httpbin_service
      connect_timeout: 5s
      type: LOGICAL_DNS
      dns_lookup_family: V4_ONLY
      lb_policy: ROUND_ROBIN
      load_assignment:
        cluster_name: httpbin
        endpoints:
        - lb_endpoints:
          - endpoint:
              address:
                socket_address:
                  address: httpbin
                  port_value: 8000
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238073821de24ded145f66&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본적으로 15001 포트에 단일 리스너를 노출하고 모든 트래픽을 httpbin 클러스터로 라우팅할 것이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380d483cded64ce710d49&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23800da6cad1f568936e2c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다시 엔보이 시작!&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380d99660f67820375cd4&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;markdown&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
cat ch3/simple.yaml

# 터미널1
docker run --name proxy --link httpbin envoyproxy/envoy:v1.19.0 --config-yaml &quot;$(cat ch3/simple.yaml)&quot;

# 터미널2
docker logs proxy
[2025-04-18 15:54:39.384][1][info][main] [source/server/server.cc:785] all clusters initialized. initializing init manager
[2025-04-18 15:54:39.384][1][info][config] [source/server/listener_manager_impl.cc:834] all dependencies initialized. starting workers
[2025-04-18 15:54:39.402][1][info][main] [source/server/server.cc:804] starting main dispatch loop&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380358858e6f7c462a52b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시가 성공적으로 시작해 15001 포트를 리스닝하고 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238059a7e7f24f7332575d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c7af55d1784d44a1f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;curl 로 프록시를 호출해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23809c8466d4d595fc98ff&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;prolog&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 터미널2
docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15001/headers
{
  &quot;headers&quot;: {
    &quot;Accept&quot;: [
      &quot;*/*&quot;
    ],
    &quot;Host&quot;: [
      &quot;httpbin&quot;
    ],
    &quot;User-Agent&quot;: [
      &quot;curl/8.13.0&quot;
    ],
    &quot;X-Envoy-Expected-Rq-Timeout-Ms&quot;: [
      &quot;15000&quot;
    ],
    &quot;X-Forwarded-Proto&quot;: [
      &quot;http&quot;
    ],
    &quot;X-Request-Id&quot;: [
      &quot;d6d43a6c-9aa5-495d-a8cf-343e28f97775&quot;
    ]
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380578141f7542d1dd21d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시를 호출했는데도 트래픽이 httpbin 서비스로 정확하게 전송됐다. 또 다음과 같은 새로운 헤더도 추가됐다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e1b803d5bf29480c5e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;X-Envoy-Expected-Rq-Timeout-Ms&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23800ca7dee45c0a01ea05&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;X-Request-Id&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380e59d60e18424b4d7e5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e29abdec972d723e8d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사소하게 보일 수 있지만, 이미 엔보이는 우리를 위해 많은 일을 하고 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238062b9b7df956aecbee9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 새 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;X-Request-Id&lt;/span&gt;&lt;/span&gt;를 만들었는데, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;X-Request-Id&lt;/span&gt;&lt;/span&gt;는 클러스터 내 다양한 요청 사이의 관계를 파악하고 요청을 처리하기 위해 여러 서비스를 거치는 동안(즉, 여러 홉)을 추적하는 데 활용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b689ffdb27c475013c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;두 번째 헤더인 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;X-Envoy-Expected-Rq-Timeout-Ms&lt;/span&gt;&lt;/span&gt;는 업스트림 서비스에 대한 힌트로, 요청이 15,000ms 후에 타임아웃될 것으로 기대한다는 의미다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238041a993f98056a0c93d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;업스트림 시스템과 그 요청이 거치는 모든 홉은 이 힌트를 사용해 데드라인을 구현할 수 있다. 데드라인을 사용하면 업스트림 시스템에 타임아웃 의도를 전달할 수 있으며, 데드라인이 넘으면 처리를 중단하게 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804ba0c2d090c5488d40&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이렇게 하면 타임아웃된 후 묶여 있던 리소스가 풀려난다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380a3928af2761a4e7d2b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 실습을 위해 Envoy 종료 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;docker rm -f proxy&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380238383ce8fdeb28d4f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238036bcf5f1cd338b33e6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 이 구성을 살짝 변경해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;예상 요청 타임아웃&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1초&lt;/span&gt;로 설정해보자.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e89502cf5ae36fc161&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;설정 파일에 라우팅 규칙을 업데이트하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380d99166c2fd703b2977&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;              - match: { prefix: &quot;/&quot; }
                route:
                  auto_host_rewrite: true
                  cluster: httpbin_service
                  timeout: 1s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380409798d62434bcef5a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238055b914dbeb39768db4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실행&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380a880bcf9858ebd991d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
#docker run -p 15000:15000 --name proxy --link httpbin envoyproxy/envoy:v1.19.0 --config-yaml &quot;$(cat ch3/simple_change_timeout.yaml)&quot;
cat ch3/simple_change_timeout.yaml
docker run --name proxy --link httpbin envoyproxy/envoy:v1.19.0 --config-yaml &quot;$(cat ch3/simple_change_timeout.yaml)&quot;
docker ps


# 타임아웃 설정 변경 확인
docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15001/headers
{
  &quot;headers&quot;: {
    &quot;Accept&quot;: [
      &quot;*/*&quot;
    ],
    &quot;Host&quot;: [
      &quot;httpbin&quot;
    ],
    &quot;User-Agent&quot;: [
      &quot;curl/8.13.0&quot;
    ],
    &quot;X-Envoy-Expected-Rq-Timeout-Ms&quot;: [
      &quot;1000&quot;
    ],
    &quot;X-Forwarded-Proto&quot;: [
      &quot;http&quot;
    ],
    &quot;X-Request-Id&quot;: [
      &quot;e4ba3eb8-73d4-4d51-97bb-ad7ac467ab58&quot;
    ]
  }
}

# 추가 테스트 : Envoy Admin API(TCP 15000) 를 통해 delay 설정
docker run -it --rm --link proxy curlimages/curl curl -X POST http://proxy:15000/logging
docker run -it --rm --link proxy curlimages/curl curl -X POST http://proxy:15000/logging?http=debug

docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15001/delay/0.5
docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15001/delay/1
docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15001/delay/2
upstream request timeout
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238063a4bbf281f3722cf1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;del style=&quot;box-sizing: border-box;&quot;&gt;다음 실습을 위해 Envoy 종료 &lt;/del&gt;&lt;del style=&quot;box-sizing: border-box;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;docker rm -f proxy&lt;/span&gt;&lt;/code&gt;&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380419f84f2b1bfadedae&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380d79e54e9603d19c0cb&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.3.2. Envoy&amp;rsquo;s Admin API&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23808c92a7f9d06689ca5b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 Admin API를 사용하면 프록시 동작에 대한 통찰력을 향상시킬 수 있고, 메트릭과 설정에 접근할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380078ebec59b513748b3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
docker run --name proxy --link httpbin envoyproxy/envoy:v1.19.0 --config-yaml &quot;$(cat ch3/simple_change_timeout.yaml)&quot;

# admin API로 Envoy stat 확인 : 응답은 리스너, 클러스터, 서버에 대한 통계 및 메트릭
docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15000/stats

# retry 통계만 확인
docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15000/stats | grep retry
cluster.httpbin_service.circuit_breakers.default.rq_retry_open: 0
cluster.httpbin_service.circuit_breakers.high.rq_retry_open: 0
cluster.httpbin_service.retry_or_shadow_abandoned: 0
cluster.httpbin_service.upstream_rq_retry: 0
cluster.httpbin_service.upstream_rq_retry_backoff_exponential: 0
cluster.httpbin_service.upstream_rq_retry_backoff_ratelimited: 0
cluster.httpbin_service.upstream_rq_retry_limit_exceeded: 0
cluster.httpbin_service.upstream_rq_retry_overflow: 0
cluster.httpbin_service.upstream_rq_retry_success: 0
...

# 다른 엔드포인트 일부 목록들도 확인
docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15000/certs # 머신상의 인증서
docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15000/clusters # 엔보이에 설정한 클러스터
docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15000/config_dump # 엔보이 설정 덤프
docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15000/listeners # 엔보이에 설정한 리스너
docker run -it --rm --link proxy curlimages/curl curl -X POST http://proxy:15000/logging # 로깅 설정 확인 가능
docker run -it --rm --link proxy curlimages/curl curl -X POST http://proxy:15000/logging?http=debug # 로깅 설정 편집 가능
docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15000/stats # 엔보이 통계
docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15000/stats/prometheus # 엔보이 통계(프로메테우스 레코드 형식)
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238000923dd863bfe76b71&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380c5b57deac70dab074b&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.3.3. Envoy request retries&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt; 요청 재시도&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23800e9aa9edcba2793ce9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;httpbin 요청을 일부러 실패시켜 엔보이가 어떻게 요청을 자동으로 재시작하는지 살펴보자.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e183f2e1daed539236&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;먼저 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;retry_policy&lt;/code&gt; 를 사용하도록 설정 파일을 업데이트 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380dc800ec2b71889e901&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;              - match: { prefix: &quot;/&quot; }
                route:
                  auto_host_rewrite: true
                  cluster: httpbin_service
                  retry_policy:
                      retry_on: 5xx  # 5xx 일때 재시도
                      num_retries: 3 # 재시도 횟수&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380f2a4cad4a60516ba42&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380f78163c46c1fa43053&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238068af48c4d3fd5c6ff7&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
docker rm -f proxy

#
cat ch3/simple_retry.yaml
docker run -p 15000:15000 --name proxy --link httpbin envoyproxy/envoy:v1.19.0 --config-yaml &quot;$(cat ch3/simple_retry.yaml)&quot;
docker run -it --rm --link proxy curlimages/curl curl -X POST http://proxy:15000/logging\?http=debug

# /stats/500 경로로 프록시를 호출 : 이 경로로 httphbin 호출하면 오류가 발생
docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15001/status/500

# 호출이 끝났는데 아무런 응답도 보이지 않는다. 엔보이 Admin API에 확인
docker run -it --rm --link proxy curlimages/curl curl -X GET http://proxy:15000/stats | grep retry

cluster.httpbin_service.circuit_breakers.default.rq_retry_open: 0
cluster.httpbin_service.circuit_breakers.high.rq_retry_open: 0
cluster.httpbin_service.retry.upstream_rq_500: 3
cluster.httpbin_service.retry.upstream_rq_5xx: 3
cluster.httpbin_service.retry.upstream_rq_completed: 3
cluster.httpbin_service.retry_or_shadow_abandoned: 0
cluster.httpbin_service.upstream_rq_retry: 3
cluster.httpbin_service.upstream_rq_retry_backoff_exponential: 3
cluster.httpbin_service.upstream_rq_retry_backoff_ratelimited: 0
cluster.httpbin_service.upstream_rq_retry_limit_exceeded: 1
cluster.httpbin_service.upstream_rq_retry_overflow: 0
...
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23801cbeb7e367fb83f817&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 업스트림 클러스터 httpbin 호출할 때 HTTP 500 응답을 받았다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380369b48d377870b0102&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 요청을 재시도했으며, 이는 통계값에 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;cluster.httpbin_service.upstream_rq_retry: 3&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt; &lt;/i&gt;으로 표시돼 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380749b3edf2f76f20a2b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806e97faf647fc7ea622&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션 네트워킹에 자동으로 신뢰성을 부여하는 엔보이의 아주 기본적인 기능을 시연해봤다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380998aabe75dce3ab9eb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 기능들을 추론하고 시연하는 데 정적 설정 파일을 사용했지만, 앞 절에서 봤듯이 이스티오는 동적 설정 기능을 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806aa335ce1f413861b3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇게 해서 이스티오는 각각의 설정을 복잡할 수 있는 대규모 엔보이 프록시 집합을 관리할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380058c1aeaca9a7298cc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e2b407e86efcc3ba7a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 실습을 위해 Envoy 종료 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;docker rm -f proxy &amp;amp;&amp;amp; docker rm -f httpbin&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23804d8162c8d0d6616f38&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380999a03e1a26aa3acea&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.4 How Envoy fits with Istio&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt; 엔보이는 어떻게 이스티오에 적합한가?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23800aa998c3aa0d65c8f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이는 이 책에서 다루는 이스티오의 기능 대부분에서 핵심 역할을 맡는다. 엔보이는 프록시로서 서비스 메시에 매우 적합하다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d98183d3aa0248471b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;하지만 엔보이를 최대한 활용하려면 보조 인프라나 구성 요소가 필요하다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806baa3ce8be15e859a7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 제공하는 사용자 설정, 보안 정책, 런타임 설정을 지원한느 구성 요소들이 컨트롤 플레인을 형성한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238068a16be9dacbaa3c14&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이도 데이터 플레인에서 모든 작업을 혼자 수행하는 것은 아니며 지원이 필요하다. 자세한 내용은 부록 B 참고.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23801da2ebd3afa9c50b29&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380689900cbc1d5709030&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;몇 가지 예를 들어 보조 구성 요소의 필요성을 설명해보자.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238060b56affdcb23251d3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 기능 덕분에 정적 설정 파일이나 런타임에 리스너, 엔드포인트, 클러스터를 찾기 위한 xDS 디스커버리 서비스를 사용해 서비스 프록시를 설정할 수 있다는 사실을 확인했다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238079bfa5eaf51e00ca01&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스터오는 istiod 컨트롤 플레인 구성 요소에서 이 xDS API들을 구현한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238033b40ddcaaf13a646a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e1ab24ffb38b712c01&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 istiod가 쿠버네티스 API를 사용해 VirtualService 등의 이스티오 설정을 읽은 다음 서비스 프록시를 동적으로 설정하는 모습을 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23806793f1f14606a73be8&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238056ae96f46b8c8a3fda&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/teh4E/btsNtevGSPK/kb9mkMkrdlfBkr4KHHTZok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/teh4E/btsNtevGSPK/kb9mkMkrdlfBkr4KHHTZok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/teh4E/btsNtevGSPK/kb9mkMkrdlfBkr4KHHTZok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fteh4E%2FbtsNtevGSPK%2Fkb9mkMkrdlfBkr4KHHTZok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;655&quot; height=&quot;357&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;357&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804197bdf26759910723&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;관련 예로는 엔드포인트를 검색하기 위해 일종의 서비스 저장소에 의존하는 엔보이의 서비스 디스커버리가 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1d7b8b2c1c238054b001da274673a528&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;A related example is Envoy&amp;rsquo;s service discovery, which relies on a service registry of some sort to discover endpoints.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380728c1aee10514c1e8a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istiod는 이 API를 구현하기도 하지만 엔보이에게 서비스 저장소의 구현을 추상화하기도 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803ab9abf642b130c704&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오를 쿠버네티스에 배포하면, 서비스 디스커버리에 쿠버네티스의 서비스 저장소를 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1d7b8b2c1c23807b8b9cc2ded238e1a9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;When Istio is deployed on Kubernetes, Istio uses Kubernetes&amp;rsquo; service registry for service discovery.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c8ae4cf9ded644164d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 구현 세부 사항은 엔보이 프록시에게 완벽히 감춰진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23805e81cfc29da5460f0c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23802886c4cda44c327d78&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또 다른 예시가 있다. 엔보이는 많은 메트릭과 텔레메트리를 내보낼 수 있다. 이 텔레메트리는 어딘가로 이동해야 하며, 엔보이는 이를 보내도록 설정돼야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e38470e106139b9fc0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 프로메테우스 같은 시계열 시스템과 통합하도록 데이트 플레인을 설정한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803eb7bff8123bf91ea8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;우리는 엔보이가 어떻게 분산 트레이싱 스팬을 오픈트레이싱 엔진에 보낼 수 있는지, 이스티오가 어떻게 스팬을 그 위치로 보낼 수 있는지도 봤다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380128538d727e608392b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 이스티오는 예거 트레이싱 엔진과 통합할 수 있으며, 집킨도 사용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23808ab180eb7233df3176&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23809c88a4ca8099eca151&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpBtQX/btsNr7p3qfh/6iOxQGMFuMfRKVd6Z2VOlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpBtQX/btsNr7p3qfh/6iOxQGMFuMfRKVd6Z2VOlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpBtQX/btsNr7p3qfh/6iOxQGMFuMfRKVd6Z2VOlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpBtQX%2FbtsNr7p3qfh%2F6iOxQGMFuMfRKVd6Z2VOlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;742&quot; height=&quot;346&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;346&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23801da81fc4096cf68858&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마지막으로 엔보이는 메시 내의 서비스로 향하는 TLS 트래픽을 종료하고 시작할 수 잇다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238014a6b5eba5e1b4d530&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇게 하려면 인증서를 생성, 서명, 로테이션하는 보조 인프라가 필요하다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806faea8ed3ee33c75b5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 이를 istiod 구성 요소를 통해 제공한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23809a87bfc5e287939da2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23806e8baeede4b6eae617&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;743&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dquhqk/btsNteWLjk4/NcCqPBvDbdnIidbHNpq33k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dquhqk/btsNteWLjk4/NcCqPBvDbdnIidbHNpq33k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dquhqk/btsNteWLjk4/NcCqPBvDbdnIidbHNpq33k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdquhqk%2FbtsNteWLjk4%2FNcCqPBvDbdnIidbHNpq33k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;743&quot; height=&quot;302&quot; data-origin-width=&quot;743&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380f6abcbd78b518922d1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 구성 요소와 엔보이 프록시는 강력한 서비스 메시를 구현하는 데 함께 기여한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380a8be4ccedb57c0e5e4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제부터 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오 프록시&lt;/span&gt;라 부르며, 그 기능들을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오의 API&lt;/span&gt;를 통해 살펴볼 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380bea6ccef0c15ce2213&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇지만 실제로는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;많은 것이 엔보이가 제공하고 구현&lt;/span&gt;하는 것임을 이해하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238022869bcdb1b67a24c4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23808fba62eaaa07eae566&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380f4aef4f076583399f7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23809d90c3e83eccd2e0de&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.5. Summary&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23801b9ab0f963f427d793&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Envoy는 애플리케이션이 애플리케이션 수준의 동작에 사용할 수 있는 프록시입니다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238058a1b1d6d664692505&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Envoy는 이스티오의 데이터 플레인입니다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380fd8aaaf4158d15021e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Envoy는 클라우드 신뢰성 문제(네트워크 장애, 토폴로지 변경, 탄력성)를 일관되고 정확하게 해결하는 데 도움을 줄 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803d8f21f825a8b17d4c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Envoy는 런타임 제어를 위해 동적 API를 사용합니다(Istio는 이를 사용합니다).&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380139d76d60b61ad6bb5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Envoy는 애플리케이션 사용 및 프록시 내부에 대한 강력한 지표와 정보를 많이 노출합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380b6be1cd8e24a44c27f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380b5b225dd2ceb9b6212&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380edaeb5fefbdae168a5&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;3.6. 참고 자료&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c23802fb8c1dbd4e05940f5&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;3.6.1. &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Envoy 소개&lt;/code&gt; : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;L4/7 Proxy&lt;/span&gt; , Istio 의 Sidecar proxy 로 사용* - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/life_of_a_request&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크&lt;/a&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/intro/terminology&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;주요 용어&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380ac8939c4f8768e192e&quot; class=&quot;notion-bookmark&quot; style=&quot;box-sizing: border-box; margin: 4px 0px; border-radius: var(--bookmark-border-radii); border: var(--bookmark-border); transition: background 120ms ease-in;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit; display: flex;&quot; href=&quot;https://blog.naver.com/yu3papa/223614975957&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
&lt;div class=&quot;notion-bookmark__content&quot; style=&quot;box-sizing: border-box; overflow: hidden; flex: 4 1 180px; padding: var(--bookmark-padding);&quot;&gt;
&lt;h5 class=&quot;notion-bookmark__title&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 2px; line-height: 1.25rem; font-size: 0.875rem; text-wrap-mode: nowrap; overflow: hidden; text-overflow: ellipsis;&quot;&gt;KANS(Kubernetes Advanced NeStudy) 3기 [6주차] - Envoy Proxy &amp;amp; Gateway API&lt;/h5&gt;
&lt;p class=&quot;notion-bookmark__description&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-size: 0.75rem; line-height: 1rem; opacity: 0.6; height: 2rem; overflow: hidden;&quot; data-ke-size=&quot;size16&quot;&gt;HOST OS : Windows 11 Pro HyperVisor : VirtualBox 7 가상머신 OS : Rocky Linux 9.4 I...&lt;/p&gt;
&lt;div class=&quot;notion-bookmark__link&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; margin-top: 6px;&quot;&gt;
&lt;div style=&quot;box-sizing: border-box; margin-inline-end: 6px; display: flex;&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: contain; object-position: center center;&quot; src=&quot;https://blog.naver.com/favicon.ico?3&quot; width=&quot;16&quot; height=&quot;16&quot; /&gt;&lt;/div&gt;
&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-size: 0.75rem; line-height: 1rem; text-wrap-mode: nowrap; overflow: hidden; text-overflow: ellipsis;&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;notion-bookmark__cover&quot; style=&quot;box-sizing: border-box; flex: 1 1 180px; position: relative; width: 500px; height: 6.75rem;&quot;&gt;
&lt;div style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380018d39f1da46e81cad&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio 구성요소와 envoy&lt;/span&gt; : 컨트롤 플레인(istiod) - ADS 를 이용한 Configuration 동기화 - 데이터 플레인(istio-proxy &amp;rarr; envoy)&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380e39fbfc8cfd86cea40&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://blog.naver.com/alice_k106/222000680202&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F832f0d89-1e5c-4f32-a612-4125acbf1902%2FUntitled.png?id=1d7b8b2c-1c23-80e3-9fbf-c8cfd86cea40&amp;amp;table=block&quot; alt=&quot;https://blog.naver.com/alice_k106/222000680202&quot; width=&quot;816&quot; height=&quot;379.512426035503&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EWvet/btsNryo64PW/6887yeMm2hekJdK6eRxu5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EWvet/btsNryo64PW/6887yeMm2hekJdK6eRxu5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EWvet/btsNryo64PW/6887yeMm2hekJdK6eRxu5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEWvet%2FbtsNryo64PW%2F6887yeMm2hekJdK6eRxu5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;460&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1d7b8b2c1c238067befbf69d2e4417b7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238012b425c78f18a60f74&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/life_of_a_request&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fedd537ec-6ec0-4fc5-b209-f4e0683daa1d%2Flor-architecture.svg?id=1d7b8b2c-1c23-8012-b425-c78f18a60f74&amp;amp;table=block&quot; alt=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/life_of_a_request&quot; width=&quot;768&quot; height=&quot;378.88&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238061968ce7b7dca37280&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Cluster&lt;/span&gt; : envoy 가 트래픽을 포워드할 수 있는 논리적인 서비스 (엔드포인트 세트), 실제 요청이 처리되는 IP 또는 엔드포인트의 묶음을 의미.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d78f63c874ec76dc76&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Endpoint&lt;/span&gt; : IP 주소, 네트워크 노드로 클러스터로 그룹핑됨, 실제 접근이 가능한 엔드포인트를 의미. 엔드포인트가 모여서 하나의 Cluster 가 된다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806383addfc33d8f4c05&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Listener&lt;/span&gt; : 무엇을 받을지 그리고 어떻게 처리할지 IP/Port 를 바인딩하고, 요청 처리 측면에서 다운스트림을 조정하는 역할.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238001b208c356045da1f1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Route&lt;/span&gt; : Listener 로 들어온 요청을 어디로 라우팅할 것인지를 정의. 라우팅 대상은 일반적으로 Cluster 라는 것에 대해 이뤄지게 된다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806e8a4decdbaaf00b51&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Filter&lt;/span&gt; : Listener 로부터 서비스에 트래픽을 전달하기까지 요청 처리 파이프라인&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380dd9aabdc05ec1a6e4c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;UpStream&lt;/span&gt; : envoy 요청을 포워딩해서 연결하는 백엔드 네트워크 노드 - 사이드카일때 application app, 아닐때 원격 백엔드&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d3bc37cc99f5ec73cb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DownStream&lt;/span&gt; : An entity connecting to envoy, In non-sidecar models this is a remote client&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238072a50ad99f7c6ef725&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380cd91cce96730217369&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Envoy 용어 정리&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;정환열&lt;/span&gt;님이 작성해서 공유해주신 Istio 사내 교육용 자료 내용이 좋아서 가져왔습니다.&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380398799df4dc7e7b305&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1032px; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238092a363d90798757452&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1032px; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23807b9b98e29b7c90abdc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;655&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZrkdi/btsNteh8cMW/nPy4hqB4tlkP2oPSuAENQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZrkdi/btsNteh8cMW/nPy4hqB4tlkP2oPSuAENQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZrkdi/btsNteh8cMW/nPy4hqB4tlkP2oPSuAENQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZrkdi%2FbtsNteh8cMW%2FnPy4hqB4tlkP2oPSuAENQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;655&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;655&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;683&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uecIf/btsNsGFMakO/aaiNclv27n4hOUphn7L0R1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uecIf/btsNsGFMakO/aaiNclv27n4hOUphn7L0R1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uecIf/btsNsGFMakO/aaiNclv27n4hOUphn7L0R1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuecIf%2FbtsNsGFMakO%2FaaiNclv27n4hOUphn7L0R1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;683&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;683&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380358240df227a456e90&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Envoy는 구성을 동적으로 관리하기 위한 강력한 API를 제공&lt;/span&gt;이 중요합니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;501&quot; data-origin-height=&quot;410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vVrEF/btsNsoMzWpT/PtFflHxECK2DeYaa2g2Nyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vVrEF/btsNsoMzWpT/PtFflHxECK2DeYaa2g2Nyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vVrEF/btsNsoMzWpT/PtFflHxECK2DeYaa2g2Nyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvVrEF%2FbtsNsoMzWpT%2FPtFflHxECK2DeYaa2g2Nyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;501&quot; height=&quot;410&quot; data-origin-width=&quot;501&quot; data-origin-height=&quot;410&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c238044bb1fee3b902815f2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b68a37f6b6abecce17&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Service Mesh 솔루션이나, Gateway API 구현체들을 Enovy를 내부적으로 사용하고 있으며, Envoy가 제공하는 동적 구성을 위한 API (xDS Sync API)를 이용하여 다양한 네트워크 정책을 구성하게 됩니다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b7bf9efaa9b2a64860&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Envoy의 xDS Sync API는 아래와 같은 레이어에서 동작하게 됩니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d198b2d23a2153dae6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;LDS - Listener Discovery Service&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238032adeeee390d7d2133&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;RDS - Route Discovery Service&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238082822df96343b40bab&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;CDS - Cluseter Discovery Service&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380adb6a6c1be362dfdde&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;EDS - Endpoint Discovery Service&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;966&quot; data-origin-height=&quot;417&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLuF9K/btsNs7wlnnx/5SBsZ9p0HBdm7SsYFiDaV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLuF9K/btsNs7wlnnx/5SBsZ9p0HBdm7SsYFiDaV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLuF9K/btsNs7wlnnx/5SBsZ9p0HBdm7SsYFiDaV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLuF9K%2FbtsNs7wlnnx%2F5SBsZ9p0HBdm7SsYFiDaV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;966&quot; height=&quot;417&quot; data-origin-width=&quot;966&quot; data-origin-height=&quot;417&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;div id=&quot;block-1d7b8b2c1c23807fb2d4ed5621e43d4c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;499&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNNXCt/btsNsp5KZvP/VX432Td3UqsXHVFkakAu5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNNXCt/btsNsp5KZvP/VX432Td3UqsXHVFkakAu5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNNXCt/btsNsp5KZvP/VX432Td3UqsXHVFkakAu5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNNXCt%2FbtsNsp5KZvP%2FVX432Td3UqsXHVFkakAu5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;765&quot; height=&quot;499&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;499&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23802f821acdbc8feb8e2e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23808eaca5e4817981f5df&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;3.6.2. Envoy 공식문서에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Quick start&lt;/span&gt; 전체 내용을 실습 및 정리 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/start/quick-start/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238016af61ca39bb5a15e8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;3.6.3. Envoy 공식문서에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Sandboxes&lt;/span&gt; 내용을 실습 및 정리 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23801d9a99ea44a6a2b209&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;3.6.4. solo academy 에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Get Started with Envoy Proxy&lt;/span&gt; 온라인 실습 렙 정리 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://academy.solo.io/learn/courses/7/get-started-with-envoy-proxy&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238003b007ebd40ba54acb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;4&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;4&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380ddbf2bde5d4ece4d27&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio gateways: Getting traffic into a cluster&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380ebb829ce5d06e6c1b3&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;4.0. 실습 환경 준비&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d392cbfceea3daa518&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;스터디 실습 환경 : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;docker &lt;/span&gt;(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kind&lt;/span&gt; - k8s 1.23.17 &amp;lsquo;23.2.28 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kubernetes.io/releases/patch-releases/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;) , &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio&lt;/span&gt; 1.17.8(&amp;rsquo;23.10.11) - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/news/releases/1.17.x/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380708502c17970ee1870&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;4.0.1. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;k8s(1.23.17) 배포&lt;/span&gt; : NodePort(&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;30000&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;30005&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTPS&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c23802f8ca0d4545834d73f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 자신의 실습 root dir로 이동
KUBECONFIG=$PWD/kubeconfig

# 아래 extramounts 생략 시, myk8s-control-plane 컨테이너 sh/bash 진입 후 직접 git clone 가능
kind create cluster --name myk8s --image kindest/node:v1.23.17 --config - &amp;lt;&amp;lt;EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000 # Sample Application (istio-ingrssgateway) HTTP
    hostPort: 30000
  - containerPort: 30001 # Prometheus
    hostPort: 30001
  - containerPort: 30002 # Grafana
    hostPort: 30002
  - containerPort: 30003 # Kiali
    hostPort: 30003
  - containerPort: 30004 # Tracing
    hostPort: 30004
  - containerPort: 30005 # Sample Application (istio-ingrssgateway) HTTPS
    hostPort: 30005
  - containerPort: 30006 # TCP Route
    hostPort: 30006
  - containerPort: 30007 # New Gateway 
    hostPort: 30007
  extraMounts: # linux or mac의 경우 해당 부분 생략 가능
  - hostPath: /Users/gasida/Downloads/istio-in-action/book-source-code-master # 각자 자신의 pwd 경로로 설정
    containerPath: /istiobook
networking:
  podSubnet: 10.10.0.0/16
  serviceSubnet: 10.200.1.0/24
EOF

# 설치 확인
docker ps

# 노드에 기본 툴 설치
docker exec -it myk8s-control-plane sh -c 'apt update &amp;amp;&amp;amp; apt install tree psmisc lsof wget bridge-utils net-tools dnsutils tcpdump ngrep iputils-ping git vim -y'

# (옵션) metrics-server
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm install metrics-server metrics-server/metrics-server --set 'args[0]=--kubelet-insecure-tls' -n kube-system
kubectl get all -n kube-system -l app.kubernetes.io/instance=metrics-server

git clone https://github.com/AcornPublishing/istio-in-action
cd istio-in-action/book-source-code-master
pwd # 각자 자신의 pwd 경로
code .
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380f398e9f9ef16e6fa8f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.0.2. istio 1.17.8 설치&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/setup/install/istioctl/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Install&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/setup/additional-setup/config-profiles/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;profile&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380498cb9cf2b961aebc6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# myk8s-control-plane 진입 후 설치 진행
docker exec -it myk8s-control-plane bash
-----------------------------------
# (옵션) 코드 파일들 마운트 확인
tree /istiobook/ -L 1
혹은
git clone ... /istiobook

# istioctl 설치
export ISTIOV=1.17.8
echo 'export ISTIOV=1.17.8' &amp;gt;&amp;gt; /root/.bashrc

curl -s -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIOV sh -
cp istio-$ISTIOV/bin/istioctl /usr/local/bin/istioctl
istioctl version --remote=false

# default 프로파일 컨트롤 플레인 배포
istioctl install --set profile=default -y

# 설치 확인 : istiod, istio-ingressgateway, crd 등
kubectl get istiooperators -n istio-system -o yaml
kubectl get all,svc,ep,sa,cm,secret,pdb -n istio-system
kubectl get cm -n istio-system istio -o yaml
kubectl get crd | grep istio.io | sort

# 보조 도구 설치
kubectl apply -f istio-$ISTIOV/samples/addons

# kiali, jaeger, prometheus, grafana 설치 확인
kubectl get pod -n istio-system
NAME                                   READY   STATUS              RESTARTS   AGE
grafana-b854c6c8-dx2q5                 0/1     ContainerCreating   0          14s
istio-ingressgateway-996bc6bb6-5q245   1/1     Running             0          38s
istiod-7df6ffc78d-2x2lh                1/1     Running             0          54s
jaeger-5556cd8fcf-4ppzc                0/1     ContainerCreating   0          14s
kiali-648847c8c4-vz99q                 0/1     ContainerCreating   0          14s
prometheus-7b8b9dd44c-2rspb            0/2     ContainerCreating   0          14s

# 빠져나오기
exit
-----------------------------------

# 실습을 위한 네임스페이스 설정
kubectl create ns istioinaction

# envoy proxy sidecar container injection을 위한 설정
kubectl label namespace istioinaction istio-injection=enabled

kubectl get ns --show-labels
AME                 STATUS   AGE     LABELS
default              Active   5m23s   kubernetes.io/metadata.name=default
istio-system         Active   97s     kubernetes.io/metadata.name=istio-system
istioinaction        Active   0s      istio-injection=enabled,kubernetes.io/metadata.name=istioinaction
kube-node-lease      Active   5m24s   kubernetes.io/metadata.name=kube-node-lease
kube-public          Active   5m24s   kubernetes.io/metadata.name=kube-public
kube-system          Active   5m24s   kubernetes.io/metadata.name=kube-system
local-path-storage   Active   5m21s   kubernetes.io/metadata.name=local-path-storage

# istio-ingressgateway 서비스 : NodePort 변경 및 nodeport 지정 변경 , externalTrafficPolicy 설정 (ClientIP 수집)
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 8080, &quot;nodePort&quot;: 30000}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 443, &quot;targetPort&quot;: 8443, &quot;nodePort&quot;: 30005}]}}'
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;:{&quot;externalTrafficPolicy&quot;: &quot;Local&quot;}}'
kubectl describe svc -n istio-system istio-ingressgateway

# NodePort 변경 및 nodeport 30001~30003으로 변경 : prometheus(30001), grafana(30002), kiali(30003), tracing(30004)
kubectl patch svc -n istio-system prometheus -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 9090, &quot;targetPort&quot;: 9090, &quot;nodePort&quot;: 30001}]}}'
kubectl patch svc -n istio-system grafana -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 3000, &quot;targetPort&quot;: 3000, &quot;nodePort&quot;: 30002}]}}'
kubectl patch svc -n istio-system kiali -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 20001, &quot;targetPort&quot;: 20001, &quot;nodePort&quot;: 30003}]}}'
kubectl patch svc -n istio-system tracing -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 16686, &quot;nodePort&quot;: 30004}]}}'

# Prometheus 접속 : envoy, istio 메트릭 확인
open http://127.0.0.1:30001

# Grafana 접속
open http://127.0.0.1:30002

# Kiali 접속 1 : NodePort
open http://127.0.0.1:30003

# (옵션) Kiali 접속 2 : Port forward
kubectl port-forward deployment/kiali -n istio-system 20001:20001 &amp;amp;
open http://127.0.0.1:20001

# tracing 접속 : 예거 트레이싱 대시보드
open http://127.0.0.1:30004


# 접속 테스트용 netshoot 파드 생성
cat &amp;lt;&amp;lt;EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: netshoot
spec:
  containers:
  - name: netshoot
    image: nicolaka/netshoot
    command: [&quot;tail&quot;]
    args: [&quot;-f&quot;, &quot;/dev/null&quot;]
  terminationGracePeriodSeconds: 0
EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23808a82a2ff2e8c9e5105&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238044b9c3eb4566339a51&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380cf912ee1db4598fa80&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;4.0.3. 참고자료&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1d7b8b2c1c2380ad8f9bfbe86bae64fb&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Istio &lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1.17&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt; 공식 문서&lt;/code&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://istio.io/&lt;/a&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;v1.17&lt;/a&gt;&lt;/span&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;/docs/&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380c68f3ce895132ad93c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;This chapter covers&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b98a6dff1f4a4de818&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Defining entry points&lt;/span&gt; into a cluster 클러스터 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;진입 지점&lt;/span&gt; 정의&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b28573e3807b0459c9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Routing ingress traffic to deployments in your cluster &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인입&lt;/span&gt; 트래픽을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;클러스터 내 배포로 라우팅&lt;/span&gt;하기&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e4b92ef5b943ffc8b1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Securing ingress traffic &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인입&lt;/span&gt; 트래픽 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;보호&lt;/span&gt;하기 (HTTPS, x.509)&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e1bcfaf3a069739909&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Routing non HTTP/S traffic &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP아닌 트래픽&lt;/span&gt; 라우팅 (TCP)&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238006a126fa652370cb8e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238073bc20e0b05c9e97c3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lFFTw/btsNsm82hfe/WixQmimPa4Ub1saL8EknK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lFFTw/btsNsm82hfe/WixQmimPa4Ub1saL8EknK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lFFTw/btsNsm82hfe/WixQmimPa4Ub1saL8EknK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlFFTw%2FbtsNsm82hfe%2FWixQmimPa4Ub1saL8EknK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;741&quot; height=&quot;326&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;326&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238010a344ed359a72ce2f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23800195cfe424e2cd8462&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.1 Traffic ingress concepts&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt; 트래픽 인그레스 개념&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380bbac1eeca2764202dd&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ingress&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;인그레스&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238036a793ccfbe6ede3cc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네트워킹 커뮤니티에는 잘 정의된 진입점으로 네트워크를 연결하는 상황을 설명하는 용어가 있는데, 바로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인그레스 포인트&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;ingress point&lt;/span&gt; 다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23805299d4e9d2206d1112&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인그레스 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;ingress&lt;/span&gt; 란 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;네트워크 외부에서 발원해 네트워크 내부 엔드포인트를 향하는 트래픽&lt;/span&gt;을 말한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380db9a81ff8cc6e96d77&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽은 먼저 네트워크 내부로 향하는 트래픽에 문지기 역할을 하는 인그레스 포인트로 라우팅된다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380979949cb78411bb737&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인그레스 포인트는 어떤 트래픽을 로컬 네트워크로 허용할지에 대한 규칙과 정책을 집행한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23807e81aec7e9e2bf9c02&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인그레스 포인트가 트래픽을 허용하면 로컬 네트워크의 올바른 엔드포인트로 트래픽을 프록시한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d5b19fe5969bac2b63&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽이 허용되지 않으면 인그레스 포인트는 트래픽을 거부한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380298df9cdbad373ace4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238086b528f4295a83150c&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.1.1 Virtual IPs: Simplifying services access&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;가상IP: 서비스 접근 단순화&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238093afcbdfdca4875810&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;우리 카탈로그에 있는 상품 목록을 외부 시스템이 가져갈 수 있도록 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;api.istioinaction.io/v1/products&lt;/code&gt; 에 노출하고 싶은 서비스가 있다고 해보자.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e8b161eec0aadaa2bd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클라이언트가 그 엔드포인트를 쿼리하려고 할 때, 클라이언트의 네트워킹 스택은 먼저 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;api.istioinaction.io&lt;/code&gt; 도메인 이름을 IP 주소로 해석하려고 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806ea43ae92ba8871246&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 DNS 서버로 수행된다. 네트워킹 스택은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DNS 서버&lt;/span&gt;에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;특정 호스트네임의 IP 주소를 물어&lt;/span&gt;본다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23807eb9c1d9aae2964d0f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;따라서 트래픽을 네트워크로 들여오는 작업의 첫 단계는 서비스 IP를 DNS의 호스트네임에 대응시키는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380f3ae25de2b42c6e4bc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;공개 주소의 경우에는 Amazon Route 53 이나 구글 Cloud DNS를 사용해 도메인 이름을 IP 주소로 대응시킬 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806681ede26cdca47199&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;자체 데이터센터에서는 내부 DNS 서버를 사용해 마찬가지 작업을 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238021a2aaedd873bd5e20&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그런데 어떤 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IP 주소&lt;/span&gt;를 이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이름에 대응&lt;/span&gt;시켜야 하는가?&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238062ac79ce25e613df71&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238079832ce6cd10b714c4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 왜&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 도메인&lt;/span&gt;을 서비스의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;단일 인스턴스&lt;/span&gt;나&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 엔드포인트(단일 IP)에 대응시키면 안 되는지&lt;/span&gt;를 그림으로 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380289eb6c42132309a23&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 방식은 매우 취약할 수 있기 때문이다. 그 서비스 인스턴스가 다운되면 어떻게 되는가?&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380db8185dc7de316027d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;동작하는 엔드포인트의 IP 주소로 DNS 매핑이 변결될 때까지 클라이언트는 많은 오류를 볼 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803bbdb0dac3805aaf4f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스가 다운될 때마다 그렇게 하는 것은 느리고, 오류가 발생하기 쉬우며, 가용성이 낮다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380f6a12fd772cd233cb0&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238051aec5d19bd9165db6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pyAUv/btsNrybEM4S/JwwP4uSsq6DOg23ypyOl8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pyAUv/btsNrybEM4S/JwwP4uSsq6DOg23ypyOl8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pyAUv/btsNrybEM4S/JwwP4uSsq6DOg23ypyOl8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpyAUv%2FbtsNrybEM4S%2FJwwP4uSsq6DOg23ypyOl8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;740&quot; height=&quot;314&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238093b4d7f5eec8b7c795&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스&lt;/span&gt;를 대표하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;가상 IP 주소&lt;/span&gt;로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;도메인 이름을 대응&lt;/span&gt;시키는 방법을 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803eb804e39745e7e37f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;가상 IP 주소가 실제 서비스 인스턴스로 트래픽을 전달하므로 가용성과 유연성을 높일 수 있다는 이점이 있으며, 가상 IP는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;리버스 프록&lt;/span&gt;시라는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인그레스 포인트&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;유형&lt;/span&gt;에 바인딩 된다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380a49c42d705f8031625&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;리버스 프록시는 요청을&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 백엔드 서비스들에 분산시&lt;/span&gt;키는 역할을 하는 중간 구성 요소로, 특정 서비스에 해당하지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238024b16dcbffdbaf1d0b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 리버스 프록시에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;로드 밸런싱&lt;/span&gt; 같은 기능도 있어 특정 백엔드 하나가 요청 때문에 과부하되지 않도록 할 수 도 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380d8b638e2cdcadc75fb&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23805aaeccc3cc1d939e9b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1hqZb/btsNsoMzYYz/lIkNMxvQ23GRekt7ElJUh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1hqZb/btsNsoMzYYz/lIkNMxvQ23GRekt7ElJUh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1hqZb/btsNsoMzYYz/lIkNMxvQ23GRekt7ElJUh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1hqZb%2FbtsNsoMzYYz%2FlIkNMxvQ23GRekt7ElJUh0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;364&quot; height=&quot;462&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380a8a21ef39613db5f01&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.1.2 Virtual hosting: Multiple services from a single access point&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;가상호스팅: 단일 접근 지점의 여러 서비스&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380dcbf77f154a7dce64b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이전 절에서 알아본 서비스는 자체 IP를 지닌 서비스 인스턴스 여럿으로 구성될 수 있지만, 클라이언트는 오직 가상 IP만을 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238040a163c535166bf1d8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 가상 IP 하나로 여러 호스트네임을 나타낼 수도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23800bb478e1ad4e46a1e8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;prod.istioinaction.io&lt;/code&gt; 와 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;api.istioinaction.io&lt;/code&gt; 가 모두 동일한 가상 IP로 해석되게 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23809db5c1d53ef5b879d2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉, 호스트네임에 대한 요청 모두 동일한 가상 IP로 흐르게 되고, 그에 따라 동일한 인그레스 리버스 프록시가 그 요청을 라우팅하게 된다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238008a259dee3224c766a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;리버스 프록시가 충분히 똑똑하다면, Host HTTP 헤더를 사용해 어느 요청이 어느 서비스 그룹으로 가야 하는지 기술할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23801d8d99f6c3139d10b2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238056a2f3f95d82112d08&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dv4vWi/btsNtkh8pQC/zenI7h3m9sgcwITOvZQLF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dv4vWi/btsNtkh8pQC/zenI7h3m9sgcwITOvZQLF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dv4vWi/btsNtkh8pQC/zenI7h3m9sgcwITOvZQLF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdv4vWi%2FbtsNtkh8pQC%2FzenI7h3m9sgcwITOvZQLF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;650&quot; height=&quot;340&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;340&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803b82f5cad2455ef316&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서로 다른 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 여러 개를 진입점 하나로 호스팅&lt;/span&gt;하는 것을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;가상 호스팅&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;virtual hosting&lt;/span&gt; 이라고 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380628603c208e5da511f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;특정 요청이 향하는 가상 호스트 그룹을 결정할 방법이 필요한데, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP/1.1&lt;/span&gt; 에서는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Host&lt;/code&gt; 헤더를 사용할 수 있고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP/2&lt;/span&gt;에서는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;:authority&lt;/code&gt; 헤더를 사용할 수 있다. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://malragasi.tistory.com/11&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog1&lt;/a&gt;, &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kagrin97-blog.vercel.app/other/Http-headers&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog2&lt;/a&gt;, &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://velog.io/@thelm3716/HTTP2-Request-Smuggling&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog3&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c5bb22cd12d892b867&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 TCP 커넥션에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TLS&lt;/span&gt;의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;server name indication&lt;/span&gt; 에 의존할 수 있다. SNI는 이 장의 뒷부분에서 자세히 살펴볼 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380229c71d65af4f98e24&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여기서 중요한 사실은 이스티오에서 보이는 에지 인그레스 기능이 서비스 트래픽을 클러스터 안으로 라우팅하는 데 가상 IP 라우팅과 가상 호스팅을 사용한다는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380e59d09fabbfed3cd9e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380a3b2a0ee777ed496e5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23808f8dd8fab9211fbead&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.2 Istio ingress gateways&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;이스티오 인그레스 게이트웨이&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380749d73dabd9d68491f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;소개 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습) &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;Gateway(L4/L5) &lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;VirtualService(L7)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380ff98bdcd5d15fe2687&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오에는 네트워크 인그레스 포인트 역할을 하는 인그레스 게이트웨이라는 개념이 있는데, 이것은 클러스터 외부에서 시작한 트래픽이 클러스터에 접근하는 것을 방어하고 제어한다. 로그 밸런싱과 가상 호스트 라우팅도 처리한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238032ab64d698cb05bc49&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 이스티오의 인그레스 게이트웨이가 클러스터로 트래픽을 허용하면서 리버스 프록시 기능도 수행하는 것을 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238004bbf7fae0b6573d15&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 인그레스 게이트웨이로 단일 엔보이 프록시를 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806a9f70f33818db0d4a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;3장에서 엔보이는 서비스 간 프록시이지만 서비스 메시 외부에서 내부의 서비스로 향하는 트래픽을 로드 밸런싱하고 라우팅하는 데 사용할 수도 있음을 확인했다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380eea2bafc7ee8a1f88e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이전 장에서 이야기했던 엔보이의 모든 기능은 인그레스 게이트웨이에서도 사용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380b29b8ef61ff4ec4632&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380c5a5f2db912ea63b3d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/evTuZ1/btsNrxjsgpf/Gpwb4uqTi2qEBq2Rv7BsCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/evTuZ1/btsNrxjsgpf/Gpwb4uqTi2qEBq2Rv7BsCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/evTuZ1/btsNrxjsgpf/Gpwb4uqTi2qEBq2Rv7BsCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FevTuZ1%2FbtsNrxjsgpf%2FGpwb4uqTi2qEBq2Rv7BsCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;652&quot; height=&quot;397&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238031a78df8ee9e5255d3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 어떻게 엔보이를 사용해 인그레스 게이트웨이를 구현하는지 자세히 살펴보자.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23808783c9c238142ac043&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 컨트롤 플레인을 구성하는 요소와 컨트롤 플레인을 보조하는 추가 구성 요소의 목록을 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23807ab67cce01ea1caa54&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380a58914c3ab0a7e4c32&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciWyl1/btsNsmONDXu/pmTfMkQ3MCIdzy0R9LLA11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciWyl1/btsNsmONDXu/pmTfMkQ3MCIdzy0R9LLA11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciWyl1/btsNsmONDXu/pmTfMkQ3MCIdzy0R9LLA11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciWyl1%2FbtsNsmONDXu%2FpmTfMkQ3MCIdzy0R9LLA11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;548&quot; height=&quot;368&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380278331e3e9f53dc6e7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 서비스 프록시(엔보이 프록시)가 이스티오 인그레스 게이트웨이에서 실제로 작동 중인지 확인해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23800d801be0301ae98f15&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238096be66f6e902e4a9ee&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;728&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tIWAv/btsNslvMAyx/k5jGIkFtKTo8Y6C3kLtrV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tIWAv/btsNslvMAyx/k5jGIkFtKTo8Y6C3kLtrV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tIWAv/btsNslvMAyx/k5jGIkFtKTo8Y6C3kLtrV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtIWAv%2FbtsNslvMAyx%2Fk5jGIkFtKTo8Y6C3kLtrV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;728&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;728&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 파드에 컨테이너 1개 기동 : 별도의 애플리케이션 컨테이너가 불필요.
kubectl get pod -n istio-system -l app=istio-ingressgateway
NAME                                   READY   STATUS    RESTARTS   AGE
istio-ingressgateway-996bc6bb6-5q245   1/1     Running   0          8m51s

# proxy 상태 확인
docker exec -it myk8s-control-plane istioctl proxy-status
NAME                                                  CLUSTER        CDS        LDS        EDS        RDS          ECDS         ISTIOD                      VERSION
istio-ingressgateway-996bc6bb6-5q245.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     NOT SENT     NOT SENT     istiod-7df6ffc78d-2x2lh     1.17.8

# proxy 설정 확인
docker exec -it myk8s-control-plane istioctl proxy-config all deploy/istio-ingressgateway.istio-system
...

docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/istio-ingressgateway.istio-system
ADDRESS PORT  MATCH DESTINATION
0.0.0.0 15021 ALL   Inline Route: /healthz/ready*
0.0.0.0 15090 ALL   Inline Route: /stats/prometheus*

docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/istio-ingressgateway.istio-system
NAME     DOMAINS     MATCH                  VIRTUAL SERVICE
         *           /stats/prometheus*
         *           /healthz/ready*
         
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system
docker exec -it myk8s-control-plane istioctl proxy-config log deploy/istio-ingressgateway.istio-system
docker exec -it myk8s-control-plane istioctl proxy-config secret deploy/istio-ingressgateway.istio-system
RESOURCE NAME     TYPE           STATUS     VALID CERT     SERIAL NUMBER                               NOT AFTER                NOT BEFORE
default           Cert Chain     ACTIVE     true           12401901870532937100071839722145404108      2025-04-17T14:44:27Z     2025-04-16T14:42:27Z
ROOTCA            CA             ACTIVE     true           213226523371779796801291257182983036466     2035-04-14T14:44:14Z     2025-04-16T14:44:14Z

# 설정 참고
kubectl get istiooperators -n istio-system -o yaml


# pilot-agent(1번 프로세스) 프로세스가 envoy 를 부트스트랩
kubectl exec -n istio-system deploy/istio-ingressgateway -- ps                                                  
    PID TTY          TIME CMD
      1 ?        00:00:00 pilot-agent
     26 ?        00:00:06 envoy
     54 ?        00:00:00 ps

kubectl exec -n istio-system deploy/istio-ingressgateway -- ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
istio-p+       1  0.0  0.4 754344 55436 ?        Ssl  14:44   0:00 /usr/local/bin/pilot-agent proxy router --domain istio-system.svc.cluster.local --proxyLogLevel=warning --proxyComponentLogLevel=misc:error --log_output_level=default:info
istio-p+      26  0.7  0.4 311296 58672 ?        Sl   14:44   0:07 /usr/local/bin/envoy -c etc/istio/proxy/envoy-rev.json --drain-time-s 45 --drain-strategy immediate --local-address-ip-version v4 --file-flush-interval-msec 1000 --disable-hot-restart --allow-unknown-static-fields --log-format %Y-%m-%dT%T.%fZ.%l.envoy %n %g:%#.%v.thread=%t -l warning --component-log-level misc:error
istio-p+      60  0.0  0.0   6412  2496 ?        Rs   14:59   0:00 ps aux

# 프로세스 실행 유저 정보 확인
kubectl exec -n istio-system deploy/istio-ingressgateway -- whoami
istio-proxy

kubectl exec -n istio-system deploy/istio-ingressgateway -- id
uid=1337(istio-proxy) gid=1337(istio-proxy) groups=1337(istio-proxy)
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804994cffcb9d1d3850e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실행 결과, 이스티오 서비스 프록시에서 동작 중인 프로세스로 pilot-agent 와 envoy가 보여야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238035831febe52b76e2f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;pilot-agent 프로세스는 처음에 엔보이 프록시를 설정하고 부트스트랩한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380a1a286d13e0fe61b6b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그리고 13장에서 보겠지만, DNS 프록시도 구현한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380b9b692cfdf27af3ba5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238043a46bf925fcba37dd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인그레스 게이트웨이가 트래픽을 클러스터 내부로 허용하도록 설정하려면, 우선 이스티오의 리소스인 Gateway 와 VirtualService 를 이해해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c3ba37dba1d37b50f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 두 리소스는 이스티오에서 트래픽의 흐름을 조절하는 데 핵심적인 역할을 한다. 하지만 여기서는 클러스터 내부로 트래픽을 수용하는 것과 관련된 맥락에서만 살펴본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23804d910efc3f0f1bb452&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380bd8c5ff3b928775139&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.2.1 Specifying Gateway resources&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;게이트웨이 리소스 지정하기 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;471&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/db6wy5/btsNpvZ3iyj/OtWikURUwGdJnlnEuHMoo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/db6wy5/btsNpvZ3iyj/OtWikURUwGdJnlnEuHMoo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/db6wy5/btsNpvZ3iyj/OtWikURUwGdJnlnEuHMoo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdb6wy5%2FbtsNpvZ3iyj%2FOtWikURUwGdJnlnEuHMoo1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;471&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;471&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c238088b575da7934e079bd&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380ce99acd222d5169cb4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오에서 인그레스 게이트웨이를 설정하려면, Gateway 리소스를 사용해 개방하고 싶은 포트와 그 포트에서 허용할 가상 호스트를 지정한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23800e815ff8777d865304&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;살펴볼 예시 Gateway 리소스는 매우 간단해 80 포트에서 가상 호스트 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;webapp.istioinaction.io&lt;/code&gt; 를 향하는 트래픽을 허용하는 HTTP 포트를 개방한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23803b9e10d8917a41766c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: coolstore-gateway #(1) 게이트웨이 이름
spec:
  selector:
    istio: ingressgateway #(2) 어느 게이트웨이 구현체인가?
  servers:
  - port:
      number: 80          #(3) 노출할 포트 
      name: http
      protocol: HTTP
    hosts:
    - &quot;webapp.istioinaction.io&quot; #(4) 이 포트의 호스트&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380a1bb70d9e880cb04f7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804e9d6bf014e0cf71c4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 게이트웨이 리소스는 80포트를 리스닝하고 HTTP 트래픽을 기대하도록 엔보이를 설정한다. 이 리소스를 만들고 무엇을 하는지 살펴보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380dcaa71cb88fd60c253&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 신규터미널 : istiod 로그
kubectl stern -n istio-system -l app=istiod
istiod-7df6ffc78d-w9szx discovery 2025-04-13T04:50:04.531700Z	info	ads	Push debounce stable[20] 1 for config Gateway/istioinaction/coolstore-gateway: 100.4665ms since last change, 100.466166ms since last push, full=true
istiod-7df6ffc78d-w9szx discovery 2025-04-13T04:50:04.532520Z	info	ads	XDS: Pushing:2025-04-13T04:50:04Z/14 Services:12 ConnectedEndpoints:1 Version:2025-04-13T04:50:04Z/14
istiod-7df6ffc78d-w9szx discovery 2025-04-13T04:50:04.537272Z	info	ads	LDS: PUSH for node:istio-ingressgateway-996bc6bb6-p6k79.istio-system resources:1 size:2.2kB
istiod-7df6ffc78d-w9szx discovery 2025-04-13T04:50:04.545298Z	warn	constructed http route config for route http.8080 on port 80 with no vhosts; Setting up a default 404 vhost
istiod-7df6ffc78d-w9szx discovery 2025-04-13T04:50:04.545584Z	info	ads	RDS: PUSH request for node:istio-ingressgateway-996bc6bb6-p6k79.istio-system resources:1 size:34B cached:0/0

# 터미널2
cat ch4/coolstore-gw.yaml
kubectl -n istioinaction apply -f ch4/coolstore-gw.yaml

# 확인
kubectl get gw,vs -n istioinaction
NAME                                            AGE
gateway.networking.istio.io/coolstore-gateway   4s

#
docker exec -it myk8s-control-plane istioctl proxy-status
NAME                                                  CLUSTER        CDS        LDS        EDS        RDS        ECDS         ISTIOD                      VERSION
istio-ingressgateway-996bc6bb6-5q245.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-7df6ffc78d-2x2lh     1.17.8

docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/istio-ingressgateway.istio-system
ADDRESS PORT  MATCH DESTINATION
0.0.0.0 8080  ALL   Route: http.8080
...

# 현재 gateway라는 CR만 생성하고 virtualservice CR은 생성하지 않았으므로, VirtualService에 404(not found)가 뜬다!
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/istio-ingressgateway.istio-system
NAME          DOMAINS     MATCH                  VIRTUAL SERVICE
http.8080     *           /*                     404
...     

# coolstore-gateway gw가 생성되면서 istio-system ns의 istio-ingressgateway에 아래와 같은 설정들이 주입됨
kubectl stern -n istio-system -l app=istiod

istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:02:11.139066Z   info    ads     Push debounce stable[18] 1 for config Gateway/istioinaction/coolstore-gateway: 101.717875ms since last change, 101.717416ms since last push, full=true
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:02:11.139370Z   info    ads     XDS: Pushing:2025-04-16T15:02:11Z/14 Services:11 ConnectedEndpoints:1 Version:2025-04-16T15:02:11Z/14
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:02:11.142270Z   info    ads     LDS: PUSH for node:istio-ingressgateway-996bc6bb6-5q245.istio-system resources:1 size:2.2kB
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:02:11.147553Z   warn    constructed http route config for route http.8080 on port 80 with no vhosts; Setting up a default 404 vhost
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:02:11.147821Z   info    ads     RDS: PUSH request for node:istio-ingressgateway-996bc6bb6-5q245.istio-system resources:1 size:34B cached:0/0


# http.8080 정보의 의미는? 그외 나머지 포트의 역할은?
kubectl get svc -n istio-system istio-ingressgateway -o jsonpath=&quot;{.spec.ports}&quot; | jq
[
  {
    &quot;name&quot;: &quot;status-port&quot;,
    &quot;nodePort&quot;: 31674,
    &quot;port&quot;: 15021,
    &quot;protocol&quot;: &quot;TCP&quot;,
    &quot;targetPort&quot;: 15021
  },
  {
    &quot;name&quot;: &quot;http2&quot;,
    &quot;nodePort&quot;: 30000, # 위에서 설정한 istio-ingressgateway svc의 nodeport중 하나 node의 30000로 받아서 istio-ingressgateway의 8080으로 보냄
    &quot;port&quot;: 80,        
    &quot;protocol&quot;: &quot;TCP&quot;,
    &quot;targetPort&quot;: 8080 
  },
  {
    &quot;name&quot;: &quot;https&quot;,
    &quot;nodePort&quot;: 30005, # 위에서 설정한 istio-ingressgateway svc의 nodeport중 하나 node의 30005로 받아서 istio-ingressgateway의 8443으로 보냄
    &quot;port&quot;: 443,
    &quot;protocol&quot;: &quot;TCP&quot;,
    &quot;targetPort&quot;: 8443
  }
]

# HTTP 포트(80)을 올바르게 노출했다. VirtualService 는 아직 아무것도 없다.
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/istio-ingressgateway.istio-system -o json
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/istio-ingressgateway.istio-system -o json --name http.8080
[
    {
        &quot;name&quot;: &quot;http.8080&quot;,
        &quot;virtualHosts&quot;: [
            {
                &quot;name&quot;: &quot;blackhole:80&quot;,
                &quot;domains&quot;: [
                    &quot;*&quot;
                ]
            }
        ],
        &quot;validateClusters&quot;: false,
        &quot;ignorePortInHostMatching&quot;: true
    }
]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380dab268dafdd92534ee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;리스너는 모든 것을 HTTP 404로 라우팅하는 기본 블랙홀 루트로 바인딩돼 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380bfa38ed7c7c2bb99e7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 절에서 트래픽을 80 포트에서 서비스 메시 내의 서비스로 라우팅하도록 가상 호스트를 설정할 것이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23807e9824cbc6b3c06c50&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380448598c91654708677&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본 istio-ingresgateway 는 권한 있는 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;privileged&lt;/span&gt; 접근이 필요하지 않다. 시스템 포트(HTTP의 경우 80)을 리스닝하지 않기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380f882a7dc2423e35b3d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istio-ingresgateway 는 기본적으로 8080 포트를 리스닝한다. 그러나 실제 포트는 서비스일지 로드밸런서일지는 모르겠지만 게이트웨이를 노출하는 데 사용하는 포트다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380d6a356d48cd3f2c636&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380998471ed5262a47a87&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.2.2 Gateway routing with virtual services&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;VirtualService로 게이트웨이 라우팅하기 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;471&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xavdf/btsNsUjUnge/aQCFWymXJXlcwRkpyfNF31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xavdf/btsNsUjUnge/aQCFWymXJXlcwRkpyfNF31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xavdf/btsNsUjUnge/aQCFWymXJXlcwRkpyfNF31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxavdf%2FbtsNsUjUnge%2FaQCFWymXJXlcwRkpyfNF31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;471&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;471&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380e589cafddd2661c16b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804e9610dcb3a62b28b4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지금까지는 이스티오 게이트웨이를 설정했다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380f691b4e88459c9b4dc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;특정 포트를 노출하고, 그 포트에서 특정 프로토콜을 예상하고, 그 포트/프로토콜 쌍에서 서빙할 특정 호스트를 정의했다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380358d4ad68edc88e134&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 트래픽이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;게이트웨이&lt;/span&gt;로 들어오면 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;그 트래픽을 서비스 메시 내 특정 서비스로 가져올 방법&lt;/u&gt;&lt;/span&gt;이 필요하다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e8b823dcd98f71a79a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이때 사용하는 것이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;VirtualService&lt;/u&gt;&lt;/span&gt; 리소스다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380f691b1f43b19688227&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VirtualService &lt;/span&gt;리소스는 클라이언트가 특정 서비스와 통신하는 방법을 정의하는데, 구체적으로 FQDN, 사용 가능한 서비스 버전, 기타 라우팅 속성(재시도, 요청 타임아웃 등)이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380e9993df17362aa1a25&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238058a60cc29c6e773260&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;가상 호스트 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;webapp.istioinaction.io&lt;/code&gt; 로 향하는 트래픽을 서비스 메시 내에 배포된 서비스로 라우팅하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VirtualService&lt;/span&gt; 예제는 다음과 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380258967ef7ce3228030&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;less&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: webapp-vs-from-gw     #1 VirtualService 이름
spec:
  hosts:
  - &quot;webapp.istioinaction.io&quot; #2 비교할 가상 호스트네임(또는 호스트네임들)
  gateways:
  - coolstore-gateway         #3 이 VirtualService 를 적용할 게이트웨이
  http:
  - route:
    - destination:            #4 이 트래픽의 목적 서비스
        host: webapp
        port:
          number: 80&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238020a524d29d140ccb53&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804b8d84e54653552e5e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;게이트웨이로 들어오는 트래픽에 대해 수행할 작업을 이 VirtualService 리소스로 정의한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23805792fce43ae7f049c1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;spec.gateway 필드에서 보듯이, 이 트래픽 규칙들은 이전 절에서 만든 coolstore-gateway 게이트웨이 정의를 통해 들어온 트래픽만 적용된다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23800b9232c605e7ad300c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 이 규칙들은 가상 호스트 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;webapp.istioinaction.io&lt;/code&gt; 로 향하는 트래픽에만 적용된다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23809fbc97f5f625c63926&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실행해보자!&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238048831bd8734616ccd2&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 신규터미널 : istiod 로그
kubectl stern -n istio-system -l app=istiod

#
cat ch4/coolstore-vs.yaml
kubectl apply -n istioinaction -f ch4/coolstore-vs.yaml

# 확인
kubectl get gw,vs -n istioinaction
NAME                                            AGE
gateway.networking.istio.io/coolstore-gateway   10m

NAME                                                   GATEWAYS                HOSTS                         AGE
virtualservice.networking.istio.io/webapp-vs-from-gw   [&quot;coolstore-gateway&quot;]   [&quot;webapp.istioinaction.io&quot;]   2m32s

# istiod 로그 확인
# virtualservice가 생성되면서 CDS, LDS, RDS가 설정된다.
kubectl stern -n istio-system -l app=istiod
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:10:00.269714Z   info    ads     Push debounce stable[19] 1 for config VirtualService/istioinaction/webapp-vs-from-gw: 100.271208ms since last change, 100.270958ms since last push, full=true
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:10:00.270216Z   info    ads     XDS: Pushing:2025-04-16T15:10:00Z/15 Services:11 ConnectedEndpoints:1 Version:2025-04-16T15:10:00Z/15
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:10:00.270780Z   info    ads     CDS: PUSH for node:istio-ingressgateway-996bc6bb6-5q245.istio-system resources:22 size:21.8kB cached:21/21
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:10:00.271381Z   info    ads     LDS: PUSH for node:istio-ingressgateway-996bc6bb6-5q245.istio-system resources:1 size:2.2kB
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:10:00.272265Z   info    ads     RDS: PUSH for node:istio-ingressgateway-996bc6bb6-5q245.istio-system resources:1 size:538B cached:0/0

#
docker exec -it myk8s-control-plane istioctl proxy-status
NAME                                                  CLUSTER        CDS        LDS        EDS        RDS        ECDS         ISTIOD                      VERSION
istio-ingressgateway-996bc6bb6-5q245.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-7df6ffc78d-2x2lh     1.17.8

docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/istio-ingressgateway.istio-system
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/istio-ingressgateway.istio-system
NAME          DOMAINS     MATCH                  VIRTUAL SERVICE
http.8080     webapp.istioinaction.io     /*                     webapp-vs-from-gw.istioinaction
...     

docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/istio-ingressgateway.istio-system -o json --name http.8080
[
    {
        &quot;name&quot;: &quot;http.8080&quot;,
        &quot;virtualHosts&quot;: [
            {
                &quot;name&quot;: &quot;webapp.istioinaction.io:80&quot;,
                &quot;domains&quot;: [
                    &quot;webapp.istioinaction.io&quot; #1 비교할 도메인
                ],
                &quot;routes&quot;: [
                    {
                        &quot;match&quot;: {
                            &quot;prefix&quot;: &quot;/&quot;
                        },
                        &quot;route&quot;: { #2 라우팅 할 곳
                            &quot;cluster&quot;: &quot;outbound|80||webapp.istioinaction.svc.cluster.local&quot;,
                            &quot;timeout&quot;: &quot;0s&quot;,
                            &quot;retryPolicy&quot;: {
                                &quot;retryOn&quot;: &quot;connect-failure,refused-stream,unavailable,cancelled,retriable-status-codes&quot;,
                                &quot;numRetries&quot;: 2,
                                &quot;retryHostPredicate&quot;: [
                                    {
                                        &quot;name&quot;: &quot;envoy.retry_host_predicates.previous_hosts&quot;,
                                        &quot;typedConfig&quot;: {
                                            &quot;@type&quot;: &quot;type.googleapis.com/envoy.extensions.retry.host.previous_hosts.v3.PreviousHostsPredicate&quot;
                                        }
                                    }
                                ],
                                &quot;hostSelectionRetryMaxAttempts&quot;: &quot;5&quot;,
                                &quot;retriableStatusCodes&quot;: [
                                    503
                                ]
                            },
                            &quot;maxGrpcTimeout&quot;: &quot;0s&quot;
                        },
                        &quot;metadata&quot;: {
                            &quot;filterMetadata&quot;: {
                                &quot;istio&quot;: {
                                    &quot;config&quot;: &quot;/apis/networking.istio.io/v1alpha3/namespaces/istioinaction/virtual-service/webapp-vs-from-gw&quot;
                                }
                            }
                        },
                        &quot;decorator&quot;: {
                            &quot;operation&quot;: &quot;webapp.istioinaction.svc.cluster.local:80/*&quot;
                        }
                    }
                ],
                &quot;includeRequestAttemptCount&quot;: true
            }
        ],
        &quot;validateClusters&quot;: false,
        &quot;ignorePortInHostMatching&quot;: true
    }
]

# 실제 애플리케이션(서비스)를 배포 전으로 cluster 에 webapp, catalog 정보가 없다.
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system
...
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23801899c1e593c112e839&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238048832cd95256a4bd74&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;루트 출력은 다른 속성 및 정보를 포함할 수 있지만 이전과 비슷해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238004b1c5c28c83a2e6a2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;핵심은 VirtualService를 정의하면 이스티오 게이트웨이에 엔보이 루트를 어떻게 생성하는지 확인 할 수 있다는 점이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380978da6ffb84d1b6d52&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 예제에서는 도메인이 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;webapp.istioinaction.io&lt;/code&gt; 와 일치하는 트래픽을 서비스 메시 내 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;webapp&lt;/code&gt; 으로 라우팅하는 엔보이 루트다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23807f973de6e62a709677&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380799bfdfe44ebd6f88e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;동작을 위해서 실제 애플리케이션(서비스)를 배포하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238014820eef78594db99d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 로그
kubectl stern -n istioinaction -l app=webapp
kubectl stern -n istioinaction -l app=catalog

# istioinaction ns에 webapp, catalog pod가 생성되면서 envoy proxy sidecar container가 자동 주입된다.
# ADS에 의해 aggregate된 xDS들이 설정된다. 여기서 CDS, EDS가 생성되면서 실제 upstream(target pod)에 대한 정보가 등록된다.
kubectl stern -n istio-system -l app=istiod
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:34.976352Z   info    ads     Incremental push, service catalog.istioinaction.svc.cluster.local at shard Kubernetes/Kubernetes has no endpoints
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:34.987320Z   info    Sidecar injection request for istioinaction/catalog-6cf4b97d-***** (actual name not yet known)
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:34.999025Z   info    ads     Incremental push, service catalog.istioinaction.svc.cluster.local at shard Kubernetes/Kubernetes has no endpoints
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.053242Z   info    ads     Incremental push, service webapp.istioinaction.svc.cluster.local at shard Kubernetes/Kubernetes has no endpoints
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.058363Z   info    Sidecar injection request for istioinaction/webapp-7685bcb84-***** (actual name not yet known)
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.070483Z   info    ads     Incremental push, service webapp.istioinaction.svc.cluster.local at shard Kubernetes/Kubernetes has no endpoints
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.171122Z   info    ads     Push debounce stable[20] 6 for config ServiceEntry/istioinaction/catalog.istioinaction.svc.cluster.local and 1 more configs: 100.599791ms since last change, 197.380333ms since last push, full=true
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.171457Z   info    ads     XDS: Pushing:2025-04-16T15:13:35Z/16 Services:13 ConnectedEndpoints:1 Version:2025-04-16T15:13:35Z/16
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.171746Z   info    ads     CDS: PUSH for node:istio-ingressgateway-996bc6bb6-5q245.istio-system resources:24 size:23.7kB cached:21/23
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.172359Z   info    ads     LDS: PUSH for node:istio-ingressgateway-996bc6bb6-5q245.istio-system resources:1 size:2.2kB
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.172421Z   info    ads     RDS: PUSH for node:istio-ingressgateway-996bc6bb6-5q245.istio-system resources:1 size:538B cached:0/0
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.175413Z   info    ads     EDS: PUSH request for node:istio-ingressgateway-996bc6bb6-5q245.istio-system resources:2 size:107B empty:2 cached:0/2 filtered:21
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.601236Z   info    ads     Incremental push, service catalog.istioinaction.svc.cluster.local at shard Kubernetes/Kubernetes has no endpoints
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.701621Z   info    ads     Push debounce stable[21] 1 for config ServiceEntry/istioinaction/catalog.istioinaction.svc.cluster.local: 100.348459ms since last change, 100.348209ms since last push, full=false
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.701700Z   info    ads     XDS: Incremental Pushing:2025-04-16T15:13:35Z/16 ConnectedEndpoints:1 Version:2025-04-16T15:13:35Z/16
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.815287Z   info    ads     Incremental push, service webapp.istioinaction.svc.cluster.local at shard Kubernetes/Kubernetes has no endpoints
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.917336Z   info    ads     Push debounce stable[22] 1 for config ServiceEntry/istioinaction/webapp.istioinaction.svc.cluster.local: 101.964667ms since last change, 101.964333ms since last push, full=false
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:35.917476Z   info    ads     XDS: Incremental Pushing:2025-04-16T15:13:35Z/16 ConnectedEndpoints:1 Version:2025-04-16T15:13:35Z/16
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:46.693106Z   info    ads     ADS: new connection for node:catalog-6cf4b97d-b99jw.istioinaction-2
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:46.693413Z   info    ads     CDS: PUSH request for node:catalog-6cf4b97d-b99jw.istioinaction resources:27 size:25.3kB cached:0/23
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:46.693667Z   info    serverca        generating a certificate for [spiffe://cluster.local/ns/istioinaction/sa/catalog], signer: , ttl: 86400
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:46.697327Z   info    ads     EDS: PUSH request for node:catalog-6cf4b97d-b99jw.istioinaction resources:23 size:3.7kB empty:0 cached:23/23
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:46.702268Z   info    ads     LDS: PUSH request for node:catalog-6cf4b97d-b99jw.istioinaction resources:20 size:47.5kB
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:46.709294Z   info    ads     RDS: PUSH request for node:catalog-6cf4b97d-b99jw.istioinaction resources:12 size:9.3kB cached:0/12
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:47.327114Z   info    ads     CDS: PUSH for node:catalog-6cf4b97d-b99jw.istioinaction resources:27 size:25.3kB cached:0/23
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:47.327215Z   info    ads     EDS: PUSH for node:catalog-6cf4b97d-b99jw.istioinaction resources:23 size:3.7kB empty:0 cached:23/23
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:47.328501Z   info    ads     LDS: PUSH for node:catalog-6cf4b97d-b99jw.istioinaction resources:20 size:47.5kB
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:13:47.328874Z   info    ads     RDS: PUSH for node:catalog-6cf4b97d-b99jw.istioinaction resources:12 size:9.3kB cached:0/12
...

# 배포
cat services/catalog/kubernetes/catalog.yaml
cat services/webapp/kubernetes/webapp.yaml 
kubectl apply -f services/catalog/kubernetes/catalog.yaml -n istioinaction
kubectl apply -f services/webapp/kubernetes/webapp.yaml -n istioinaction

# 확인
kubectl get pod -n istioinaction -owide
NAME                     READY   STATUS    RESTARTS   AGE
catalog-6cf4b97d-nwh9w   2/2     Running   0          10m
webapp-7685bcb84-mck2d   2/2     Running   0          10m

# krew plugin images 설치 후 사용
kubectl images -n istioinaction
[Summary]: 1 namespaces, 2 pods, 6 containers and 3 different images
+------------------------+-------------------+--------------------------------+
|          Pod           |     Container     |             Image              |
+------------------------+-------------------+--------------------------------+
| catalog-6cf4b97d-b99jw | catalog           | istioinaction/catalog:latest   |
+                        +-------------------+--------------------------------+
|                        | istio-proxy       | docker.io/istio/proxyv2:1.17.8 |
+                        +-------------------+                                +
|                        | (init) istio-init |                                |
+------------------------+-------------------+--------------------------------+
| webapp-7685bcb84-xrtt7 | webapp            | istioinaction/webapp:latest    |
+                        +-------------------+--------------------------------+
|                        | istio-proxy       | docker.io/istio/proxyv2:1.17.8 |
+                        +-------------------+                                +
|                        | (init) istio-init |                                |
+------------------------+-------------------+--------------------------------+

# krew plugin resource-capacity 설치 후 사용 : istioinaction 네임스페이스에 파드에 컨테이너별 CPU/Mem Request/Limit 확인
kubectl resource-capacity -n istioinaction -c --pod-count
kubectl resource-capacity -n istioinaction -c --pod-count -u
NODE                  POD                      CONTAINER     CPU REQUESTS   CPU LIMITS    CPU UTIL   MEMORY REQUESTS   MEMORY LIMITS   MEMORY UTIL   POD COUNT

myk8s-control-plane   *                        *             200m (2%)      4000m (50%)   9m (0%)    256Mi (2%)        2048Mi (17%)    129Mi (1%)    2/110
myk8s-control-plane   catalog-6cf4b97d-m7jq9   *             100m (1%)      2000m (25%)   5m (0%)    128Mi (1%)        1024Mi (8%)     70Mi (0%)
myk8s-control-plane   catalog-6cf4b97d-m7jq9   catalog       0m (0%)        0m (0%)       0m (0%)    0Mi (0%)          0Mi (0%)        22Mi (0%)
myk8s-control-plane   catalog-6cf4b97d-m7jq9   istio-proxy   100m (1%)      2000m (25%)   5m (0%)    128Mi (1%)        1024Mi (8%)     48Mi (0%)
...

#
docker exec -it myk8s-control-plane istioctl proxy-status
NAME                                                  CLUSTER        CDS        LDS        EDS        RDS        ECDS         ISTIOD                      VERSION
catalog-6cf4b97d-b99jw.istioinaction                  Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-7df6ffc78d-2x2lh     1.17.8
istio-ingressgateway-996bc6bb6-5q245.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-7df6ffc78d-2x2lh     1.17.8
webapp-7685bcb84-xrtt7.istioinaction                  Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-7df6ffc78d-2x2lh     1.17.8

docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/istio-ingressgateway.istio-system
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/istio-ingressgateway.istio-system | egrep 'TYPE|istioinaction'
SERVICE FQDN                                            PORT      SUBSET     DIRECTION     TYPE           DESTINATION RULE
catalog.istioinaction.svc.cluster.local                 80        -          outbound      EDS            
webapp.istioinaction.svc.cluster.local                  80        -          outbound      EDS  

# istio-ingressgateway 에서 catalog/webapp 의 Service(ClusterIP)로 전달하는게 아니라, 바로 파드 IP인 Endpoint 로 전달함.
## 즉, istio 를 사용하지 않았다면, Service(ClusterIP) 동작 처리를 위해서 Node에 iptable/conntrack 를 사용했었어야 하지만,
## istio 사용 시에는 Node에 iptable/conntrack 를 사용하지 않아서, 이 부분에 대한 통신 라우팅 효율이 있다.
## 아래 보이는 10.10.0.13, 10.10.0.14가 각각 catalog, webapp의 pod ip 이다.
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system | egrep 'ENDPOINT|istioinaction'
ENDPOINT                                                STATUS      OUTLIER CHECK     CLUSTER
10.10.0.13:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local
10.10.0.14:8080                                         HEALTHY     OK                outbound|80||webapp.istioinaction.svc.cluster.local

kubectl get po -n istioinaction -o wide
NAME                     READY   STATUS    RESTARTS   AGE     IP           NODE                  NOMINATED NODE   READINESS GATES
catalog-6cf4b97d-b99jw   2/2     Running   0          6m51s   10.10.0.13   myk8s-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;
webapp-7685bcb84-xrtt7   2/2     Running   0          6m50s   10.10.0.14   myk8s-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;

#
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/webapp.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/webapp.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/webapp.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/webapp.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config secret deploy/webapp.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/webapp.istioinaction | egrep 'ENDPOINT|istioinaction'
ENDPOINT                                                STATUS      OUTLIER CHECK     CLUSTER
10.10.0.13:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local
10.10.0.14:8080                                         HEALTHY     OK                outbound|80||webapp.istioinaction.svc.cluster.local

# 현재 모든 istio-proxy 가 EDS로 K8S Service(Endpoint) 정보를 알 고 있다
docker exec -it myk8s-control-plane istioctl proxy-config listener deploy/catalog.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/catalog.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/catalog.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/catalog.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config secret deploy/catalog.istioinaction
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/catalog.istioinaction | egrep 'ENDPOINT|istioinaction'
ENDPOINT                                                STATUS      OUTLIER CHECK     CLUSTER
10.10.0.13:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local
10.10.0.14:8080                                         HEALTHY     OK                outbound|80||webapp.istioinaction.svc.cluster.local



# netshoot로 내부에서 catalog 접속 확인
kubectl exec -it netshoot -- curl -s http://catalog.istioinaction/items/1 | jq
{
  &quot;id&quot;: 1,
  &quot;color&quot;: &quot;amber&quot;,
  &quot;department&quot;: &quot;Eyewear&quot;,
  &quot;name&quot;: &quot;Elinor Glasses&quot;,
  &quot;price&quot;: &quot;282.00&quot;
}

# netshoot로 내부에서 webapp 접속 확인 : 즉 webapp은 다른 백엔드 서비스의 파사드 facade 역할을 한다.
kubectl exec -it netshoot -- curl -s http://webapp.istioinaction/api/catalog/items/1 | jq
{
  &quot;id&quot;: 1,
  &quot;color&quot;: &quot;amber&quot;,
  &quot;department&quot;: &quot;Eyewear&quot;,
  &quot;name&quot;: &quot;Elinor Glasses&quot;,
  &quot;price&quot;: &quot;282.00&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238073932bc886f54ea919&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(추가) catalog, webapp 에 replicas=1 &amp;rarr; 2로 증가 후 istio EDS(Endpoint) 정보 확인&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23801db911f7761195feda&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 로그 모니터링
kubectl stern -n istio-system -l app=istiod

# catalog, webapp 에 replicas=1 &amp;rarr; 2로 증가
kubectl scale deployment -n istioinaction webapp --replicas 2
kubectl scale deployment -n istioinaction catalog --replicas 2

# 모든 istio-proxy 가 EDS로 해당 K8S Service의 Endpoint 목록 정보 동기화되어 알고 있음을 확인
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system | egrep 'ENDPOINT|istioinaction'
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/webapp.istioinaction | egrep 'ENDPOINT|istioinaction'
docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/catalog.istioinaction | egrep 'ENDPOINT|istioinaction'

ENDPOINT                                                STATUS      OUTLIER CHECK     CLUSTER
10.10.0.13:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local
10.10.0.14:8080                                         HEALTHY     OK                outbound|80||webapp.istioinaction.svc.cluster.local
10.10.0.15:8080                                         HEALTHY     OK                outbound|80||webapp.istioinaction.svc.cluster.local
10.10.0.16:3000                                         HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local

# 다음 실습을 위해서 catalog, webapp 에 replicas=2 &amp;rarr; 1로 감소 해두기
kubectl scale deployment -n istioinaction webapp --replicas 1
kubectl scale deployment -n istioinaction catalog --replicas 1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23800fb8eaf3d5804b47d2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istio controlplane 는 어떻게 K8S Service(Endpoint)의 정보를 획득할 수 있었을까?&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c2b8e9d56b2c1978f9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Service(Endpoint)가 빈번하게 변경될 경우, istio 가 역시 빈번하게 istio-proxy 들에게 전파가 될 것인데, 이를 최적화 하는 방법은 무엇이 있을까?&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380dba4c4c6af5bb5fc0c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380638bbee09ca3a27b7f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 외부(?)에서 호출 해보자!&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238049ba6fd6c026480c21&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 터미널 : istio-ingressgateway 로깅 수준 상향
kubectl exec -it deploy/istio-ingressgateway -n istio-system -- curl -X POST http://localhost:15000/logging\?http=debug
kubectl stern -n istio-system -l app=istio-ingressgateway
혹은
kubectl logs -n istio-system -l app=istio-ingressgateway -f
istio-ingressgateway-996bc6bb6-p6k79 istio-proxy 2025-04-13T06:22:13.389828Z	debug	envoy http external/envoy/source/common/http/conn_manager_impl.cc:1032	[C4403][S8504958039178930365] request end stream	thread=42
istio-ingressgateway-996bc6bb6-p6k79 istio-proxy 2025-04-13T06:22:13.390654Z	debug	envoy http external/envoy/source/common/http/filter_manager.cc:917	[C4403][S8504958039178930365] Preparing local reply with details route_not_found	thread=42
istio-ingressgateway-996bc6bb6-p6k79 istio-proxy 2025-04-13T06:22:13.390756Z	debug	envoy http external/envoy/source/common/http/filter_manager.cc:959	[C4403][S8504958039178930365] Executing sending local reply.	thread=42
istio-ingressgateway-996bc6bb6-p6k79 istio-proxy 2025-04-13T06:22:13.390789Z	debug	envoy http external/envoy/source/common/http/conn_manager_impl.cc:1687	[C4403][S8504958039178930365] encoding headers via codec (end_stream=true):
istio-ingressgateway-996bc6bb6-p6k79 istio-proxy ':status', '404'
...

# 외부(?)에서 호출 시도 : Host 헤더가 게이트웨이가 인식하는 호스트가 아니다

curl http://localhost:30000/api/catalog -v

* Host localhost:30000 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:30000...
* Connected to localhost (::1) port 30000
&amp;gt; GET /api/catalog HTTP/1.1
&amp;gt; Host: localhost:30000
&amp;gt; User-Agent: curl/8.7.1
&amp;gt; Accept: */*
&amp;gt; 
* Request completely sent off
&amp;lt; HTTP/1.1 404 Not Found
&amp;lt; date: Wed, 16 Apr 2025 15:26:07 GMT
&amp;lt; server: istio-envoy
&amp;lt; content-length: 0
&amp;lt; 
* Connection #0 to host localhost left intact


# curl 에 host 헤더 지정 후 호출 시도
curl -s http://localhost:30000/api/catalog -H &quot;Host: webapp.istioinaction.io&quot; | jq
[
  {
    &quot;id&quot;: 1,
    &quot;color&quot;: &quot;amber&quot;,
    &quot;department&quot;: &quot;Eyewear&quot;,
    &quot;name&quot;: &quot;Elinor Glasses&quot;,
    &quot;price&quot;: &quot;282.00&quot;
...
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238098863cf11fdb5286d6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23801995fdfe134c1b7b00&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-purple);&quot; class=&quot;highlighted-color color-purple&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(추가) 전체적인 트래픽 흐름 실습으로 알아보기&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238098b5a4fa7b74d7e33c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;사전 준비&lt;/code&gt; : 임시로 Istio 내부망에서 mTLS 통신 기능을 끄기 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/concepts/security/#peer-authentication&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; &amp;rarr; 즉, http 평문 통신 환경으로 동작.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;522&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uGLkw/btsNsm2eE1L/9JKGXEq1k1qKl7j9YXzwyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uGLkw/btsNsm2eE1L/9JKGXEq1k1qKl7j9YXzwyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uGLkw/btsNsm2eE1L/9JKGXEq1k1qKl7j9YXzwyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuGLkw%2FbtsNsm2eE1L%2F9JKGXEq1k1qKl7j9YXzwyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;522&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;522&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1d7b8b2c1c2380c18fc6fd6670770802&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;istio-ingressgateway &amp;rarr; webapp(webapp &amp;rarr; catalog 도 동일) 구간에 mTLS 미사용으로 오른쪽 Principals 식별 ID 없음&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238039b162ff25a236de57&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# Istio 메시 내부망에서 모든 mTLS 통신 기능 끄기 설정 : (참고) 특정 네임스페이스 등 세부 조절 설정 가능 
cat &amp;lt;&amp;lt;EOF | kubectl apply -f -
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: default
  namespace: istio-system
spec:
  mtls:
    mode: DISABLE
EOF

kubectl get PeerAuthentication -n istio-system
NAME      MODE      AGE
default   DISABLE   6h13m

# 설정 적용 후, 실제로 인증서도 없음을 확인
docker exec -it myk8s-control-plane istioctl proxy-config secret deploy/istio-ingressgateway.istio-system
No active or warming secrets found.

docker exec -it myk8s-control-plane istioctl proxy-config secret deploy/webapp.istioinaction
No active or warming secrets found.

docker exec -it myk8s-control-plane istioctl proxy-config secret deploy/catalog.istioinaction
No active or warming secrets found.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23802a9becd722f5926de4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1052px; max-width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;698&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eoVxgV/btsNsPb4cI1/sl21cGSgW1uJ39Jt6iWTf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eoVxgV/btsNsPb4cI1/sl21cGSgW1uJ39Jt6iWTf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eoVxgV/btsNsPb4cI1/sl21cGSgW1uJ39Jt6iWTf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeoVxgV%2FbtsNsPb4cI1%2Fsl21cGSgW1uJ39Jt6iWTf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;698&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;698&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23800085efc644693c3858&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1052px; max-width: 100%;&quot;&gt;k8s ingress flow 도식화 부분이지만, istio-ingress 도 유사하게 동작함.&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238087bf31ffcf2a3a9836&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자신의 PC에서 localhost(127.0.0.1)로 30000 포트로 웹 호출&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1d7b8b2c1c23806c84ece6e377ba1a70&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;소스IP:소스포트 = &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;127.0.0.1&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;:랜덤포트&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;목적지IP:목적지포트 = &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;127.0.0.1&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;:30000&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1d7b8b2c1c2380f0b06bd5422a63c616&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;Docker 컨테이너가 30000 포트를 호스트로 Listen(Expose)하고 있어서, Docker Network(kind)로 진입으로 2번 처럼 NAT 변환&lt;/i&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d7b8b2c1c23800685b6e49eaa795501&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238027824ae1e9528b741f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;myk8s-control-plane(Master Node) 컨테이너에 NodePort 30000 포트로 호출&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1d7b8b2c1c2380c0ba96c28406467f10&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;소스IP:소스포트 = &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;172.18.0.1&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;:랜덤포트&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;목적지IP:목적지포트 = &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;172.18.0.2&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-purple);&quot; class=&quot;highlighted-color color-purple&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;30000&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380f99ef6df8dc9ca1575&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;172.18.0.1&lt;/span&gt;&lt;/i&gt;&lt;i&gt; 는 Docker Network(kind) 172.18.0.0/16에서 gateway ip임&lt;/i&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c23806398cbedf8f65e1974&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;gradle&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;docker inspect kind | jq
docker inspect kind | grep -i gateway
                    &quot;Gateway&quot;: &quot;172.18.0.1&quot;
                    &quot;Gateway&quot;: &quot;fc00:f853:ccd:e793::1&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238090b2d4f242fa9031ce&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;172.18.0.2&lt;/span&gt;&lt;/i&gt;&lt;i&gt; 는 myk8s-control-plane(Master Node) 컨테이너에 할당된 IP임&lt;/i&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380579c51e91d9afea100&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;docker exec -it myk8s-control-plane ifconfig eth0
eth0: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 65535
        inet 172.18.0.2  netmask 255.255.0.0  broadcast 172.18.255.255
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23805d8b69d067358289e8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이후 아래 3번 처럼 Service(NodePort 30000)에 Endpoint인 istio-ingressgateway 파드 IP(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;10.10.0.6&lt;/span&gt;)로 전달&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c23807aa30deca977398bf3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;kubectl get pod -n istio-system -l app=istio-ingressgateway -o jsonpath='{.items[*].status.podIP}'
10.10.0.6&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23804cb842fd743def0825&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;wireshark 패킷으로 확인&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;991&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhl4BA/btsNqqDV77M/Wgrve5KmpDEfs6F40rOyak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhl4BA/btsNqqDV77M/Wgrve5KmpDEfs6F40rOyak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhl4BA/btsNqqDV77M/Wgrve5KmpDEfs6F40rOyak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbhl4BA%2FbtsNqqDV77M%2FWgrve5KmpDEfs6F40rOyak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;991&quot; height=&quot;370&quot; data-origin-width=&quot;991&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380779ce1ede4ab7367ac&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238085bbcdf1a535661b87&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;packet 확인 및 추출 방법&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380b7a677ca30b5c4d0e6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 트래픽 발생
curl -s http://localhost:30000/api/catalog -H &quot;Host: webapp.istioinaction.io&quot;

# ngrep 툴로 패캣 덤프 확인 : control-plane 노드(?)의 NodePort 30000 대상
docker exec -it myk8s-control-plane sh -c &quot;ngrep -tW byline -d eth0 '' 'tcp port 30000'&quot;
####
GET /api/catalog HTTP/1.1.
Host: webapp.istioinaction.io.
User-Agent: curl/8.7.1.
Accept: */*.
.

##
T 2025/04/14 08:34:13.824436 172.18.0.2:30000 -&amp;gt; 172.18.0.1:64898 [AP] #6
HTTP/1.1 200 OK.
content-length: 357.
content-type: application/json; charset=utf-8.
date: Mon, 14 Apr 2025 08:34:13 GMT.
x-envoy-upstream-service-time: 15.
server: istio-envoy.

---

# tcpdump 로 확인
docker exec -it myk8s-control-plane tcpdump -i eth0 tcp port 30000 -nn

# 트래픽 발생
curl -s http://localhost:30000/api/catalog -H &quot;Host: webapp.istioinaction.io&quot;

---

# tcpdump 로 패킷 추출 : control-plane 노드(?)의 /root 디렉터리에 test1.pcap 파일 생성됨
docker exec -it myk8s-control-plane tcpdump -i eth0 tcp port 30000 -nn -w /root/test1.pcap
# 아래 트래픽 발생 이후 CTRL+C로 취소

# 트래픽 발생
curl -s http://localhost:30000/api/catalog -H &quot;Host: webapp.istioinaction.io&quot;

# 파일 확인
docker exec -it myk8s-control-plane ls /root
test1.pcap

# 노드(실제로는 컨테이너)에서 로컬에 현재 디렉터리에 파일 복사
docker cp myk8s-control-plane:/root/test1.pcap ./

# 와이어샤크로 pcap 파일 확인
wireshark&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380418adcc6e908c4c2ed&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b691add7b7511b1c2d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio-ingressgateway 파드 IP로 호출 전달&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1d7b8b2c1c23808ab8b6f8833bcad83c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;소스IP:소스포트 = &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;172.18.0.1&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;:랜덤포트&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;목적지IP:목적지포트 = &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;10.10.0.6&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-purple);&quot; class=&quot;highlighted-color color-purple&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;8080&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1d7b8b2c1c2380a8942edceb533273d9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;istio-ingressgateway Service 에 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;externalTrafficPolicy: Local&lt;/code&gt; 이므로 소스IP는 172.18.0.1 유지&lt;/p&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380fd9b30e268bcfc557b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;목적지 IP는 파드 IP로 + 목적지 포트는 istio-ingressgateway Service 의 target port 인 8080으로 NAT 변환&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380da947dc012e658afc5&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;kubectl get svc -n istio-system istio-ingressgateway  -o yaml
  - name: http2
    nodePort: 30000  #1 NodePort 서비스로 트래픽 인입하여
    port: 80         # 참고로 해당 포트는 내부망에서 직접 Service IP/Domain으로 접속 시 사용. NodePort 접속 시 미사용
    protocol: TCP
    targetPort: 8080 #2 서비스의 엔드포인트인 istio-ingressgateway 파드의 IP로 전달시 목적지 Port&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1d7b8b2c1c23809c813acc5b6cf4fbf8&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이후 아래 4번 처럼 istio-ingressgateway 파드에서 목적지 대상 애플리케이션 파드로 직접 호출 전달&lt;/p&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380b5a129d0cf5e0e5494&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;wireshark 패킷으로 확인&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1045&quot; data-origin-height=&quot;488&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ca8NIx/btsNtj4A2v1/R8535isr26qjtA6dfs7HLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ca8NIx/btsNtj4A2v1/R8535isr26qjtA6dfs7HLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ca8NIx/btsNtj4A2v1/R8535isr26qjtA6dfs7HLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fca8NIx%2FbtsNtj4A2v1%2FR8535isr26qjtA6dfs7HLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1045&quot; height=&quot;488&quot; data-origin-width=&quot;1045&quot; data-origin-height=&quot;488&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c238029a50fd861bbcf7714&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380329a7fc54f36202ec4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;packet 확인 및 추출 방법&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c23804b9761ccbd9e916286&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;--------------------------------------------------------------------------------
# istio-ingresgateway 파드의 vnic 와 vritual-pair 인 control-plane 노드(?)의 veth 이름 찾기
## istio-ingresgateway 파드 IP 확인
IGWIP=$(kubectl get pod -n istio-system -l app=istio-ingressgateway -o jsonpath='{.items[*].status.podIP}')
echo $IGWIP

## veth 이름 확인
docker exec -it myk8s-control-plane ip -c route | grep $IGWIP
docker exec -it myk8s-control-plane ip -c route | grep $IGWIP | awk '{ print $3 }'
IGWVETH=$(docker exec -it myk8s-control-plane ip -c route | grep $IGWIP | awk '{ print $3 }')
echo $IGWVETH
veth3df9536e &amp;lt;- 해당 이름을 메모해두기
--------------------------------------------------------------------------------

# 트래픽 발생
curl -s http://localhost:30000/api/catalog -H &quot;Host: webapp.istioinaction.io&quot;


# ngrep 확인(메모 정보 직접 기입!) : control-plane 노드(?)에서 istio-ingressgw의 vpair의 veth 8080 대상
docker exec -it myk8s-control-plane sh -c &quot;ngrep -tW byline -d veth3df9536e '' 'tcp port 8080'&quot;
####
T 2025/04/14 08:45:52.508224 172.18.0.1:57536 -&amp;gt; 10.10.0.6:8080 [AP] #4
GET /api/catalog HTTP/1.1.
Host: webapp.istioinaction.io.
User-Agent: curl/8.7.1.
Accept: */*.
.

#####
T 2025/04/14 08:45:52.509665 10.10.0.6:46612 -&amp;gt; 10.10.0.9:8080 [AP] #9
GET /api/catalog HTTP/1.1.
host: webapp.istioinaction.io.
user-agent: curl/8.7.1.
accept: */*.
x-forwarded-for: 172.18.0.1.
x-forwarded-proto: http.
x-envoy-internal: true.
x-request-id: 4cdf5faa-2eb2-425e-90cd-3152e376a7ca.
x-envoy-decorator-operation: webapp.istioinaction.svc.cluster.local:80/*.
x-envoy-peer-metadata: ChQKDkFQUF9DT05UQUlORVJTEgIaAAoaCgpDTFVTVEVSX0lEEgwaCkt1YmVybmV0ZXMKGwoMSU5TVEFOQ0VfSVBTEgsaCTEwLjEwLjAuNgoZCg1JU1RJT19WRVJTSU9OEggaBjEuMTcuOAqcAwoGTEFCRUxTEpEDKo4DCh0KA2FwcBIWGhRpc3Rpby1pbmdyZXNzZ2F0ZXdheQoTCgVjaGFydBIKGghnYXRld2F5cwoUCghoZXJpdGFnZRIIGgZUaWxsZXIKNgopaW5zdGFsbC5vcGVyYXRvci5pc3Rpby5pby9vd25pbmctcmVzb3VyY2USCRoHdW5rbm93bgoZCgVpc3RpbxIQGg5pbmdyZXNzZ2F0ZXdheQoZCgxpc3Rpby5pby9yZXYSCRoHZGVmYXVsdAowChtvcGVyYXRvci5pc3Rpby5pby9jb21wb25lbnQSERoPSW5ncmVzc0dhdGV3YXlzChIKB3JlbGVhc2USBxoFaXN0aW8KOQofc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtbmFtZRIWGhRpc3Rpby1pbmdyZXNzZ2F0ZXdheQovCiNzZXJ2aWNlLmlzdGlvLmlvL2Nhbm9uaWNhbC1yZXZpc2lvbhIIGgZsYXRlc3QKIgoXc2lkZWNhci5pc3Rpby5pby9pbmplY3QSBxoFZmFsc2UKGgoHTUVTSF9JRBIPGg1jbHVzdGVyLmxvY2FsCi4KBE5BTUUSJhokaXN0aW8taW5ncmVzc2dhdGV3YXktOTk2YmM2YmI2LXpuNTlqChsKCU5BTUVTUEFDRRIOGgxpc3Rpby1zeXN0ZW0KXQoFT1dORVISVBpSa3ViZXJuZXRlczovL2FwaXMvYXBwcy92MS9uYW1lc3BhY2VzL2lzdGlvLXN5c3RlbS9kZXBsb3ltZW50cy9pc3Rpby1pbmdyZXNzZ2F0ZXdheQoXChFQTEFURk9STV9NRVRBREFUQRICKgAKJwoNV09SS0xPQURfTkFNRRIWGhRpc3Rpby1pbmdyZXNzZ2F0ZXdheQ==.
x-envoy-peer-metadata-id: router~10.10.0.6~istio-ingressgateway-996bc6bb6-zn59j.istio-system~istio-system.svc.cluster.local.
x-envoy-attempt-count: 1.
x-b3-traceid: 672472dde754a886d33204c7d68908d8.
x-b3-spanid: d33204c7d68908d8.
x-b3-sampled: 0.
...

# x-b3-sampled: This denotes whether a request should be traced or not. A value of 1 means yes and 0 means prohibited.
# x-b3-traceid: This is 8 or 16 bytes in length, indicating the overall ID of the trace. 
# x-b3-parentspanid: This is 8 bytes in length and represents the position of the parent operation in the trace tree. Every span will have a parent span unless it is the root itself.
# x-b3-spanid: This is 8 bytes in length and represents the position of the current operation in the trace tree.
---

# tcpdump 로 확인
docker exec -it myk8s-control-plane tcpdump -i veth3df9536e tcp port 8080 -nn

---

# tcpdump 로 패킷 추출 : control-plane 노드(?)의 /root 디렉터리에 test2.pcap 파일 생성됨
docker exec -it myk8s-control-plane tcpdump -i veth3df9536e tcp port 8080 -nn -w /root/test2.pcap
# 트래픽 발생 이후 CTRL+C로 취소

# 파일 확인
docker exec -it myk8s-control-plane ls /root
test1.pcap test2.pcap

# 노드(실제로는 컨테이너)에서 로컬에 현재 디렉터리에 파일 복사
docker cp myk8s-control-plane:/root/test2.pcap ./

# 와이어샤크로 pcap 파일 확인
wireshark&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380048a9bd13be8418c3b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b9b385da3547542313&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio-ingressgateway 파드 EDS 정보를 확인하여, 해당 서비스의 Endpoint인 파드의 IP로 직접 호출 전달&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1d7b8b2c1c23804baf00df86389656d0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;소스IP:소스포트 = &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;1010.0.6&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;:랜덤포트&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;목적지IP:목적지포트 = &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;10.10.0.9:8080&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380f6a6f5d3499d2e3d58&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;10.10.10.9:8080은 Istio EDS(Endpoint) 정보로 알게된, 목적지 애플리케이션의 Service의 Endpoint 목록 정보&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380a793e9d0e9d0c12f27&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;accesslog&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;docker exec -it myk8s-control-plane istioctl proxy-config endpoint deploy/istio-ingressgateway.istio-system | egrep 'ENDPOINT|istioinaction'
ENDPOINT                                                STATUS      OUTLIER CHECK     CLUSTER
10.10.0.8:3000                                          HEALTHY     OK                outbound|80||catalog.istioinaction.svc.cluster.local
10.10.0.9:8080                                          HEALTHY     OK                outbound|80||webapp.istioinaction.svc.cluster.local&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380849941cf513f3b4dae&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 처럼 webapp 서비스의 ClusterIP/Domain을 경유하지 않고, 바로 Endpoint인 10.10.0.9:8080으로 직접 호출 전달&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c238083a5e5cf5b38cf3938&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 
kubectl get svc,ep -n istioinaction webapp                                                                                                        
NAME             TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/webapp   ClusterIP   10.200.1.51   &amp;lt;none&amp;gt;        80/TCP    4h6m

NAME               ENDPOINTS        AGE
endpoints/webapp   10.10.0.9:8080   4h6m&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380a4896adfe31c1afb82&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 istio-ingressgateway 는 envoy 동작 중으로, 전달 시 xff 헤더, x-envoy 헤더, x-request-id 헤더, x-b3-* 등 추가해서 전달&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380c9abe9dc31e86ff311&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;docker exec -it myk8s-control-plane sh -c &quot;ngrep -tW byline -d veth3df9536e '' 'tcp port 8080'&quot;
interface: veth3df9536e (10.10.0.1/255.255.255.255)
filter: ( tcp port 8080 ) and ((ip || ip6) || (vlan &amp;amp;&amp;amp; (ip || ip6)))
####
T 2025/04/14 05:31:05.196680 172.18.0.1:62346 -&amp;gt; 10.10.0.6:8080 [AP] #4
GET /api/catalog HTTP/1.1.
Host: webapp.istioinaction.io.
User-Agent: curl/8.7.1.
Accept: */*.
.

#####
T 2025/04/14 05:31:05.199269 10.10.0.6:37886 -&amp;gt; 10.10.0.9:8080 [AP] #9
GET /api/catalog HTTP/1.1.
host: webapp.istioinaction.io.
user-agent: curl/8.7.1.
accept: */*.
x-forwarded-for: 172.18.0.1.
x-forwarded-proto: http.
x-envoy-internal: true.
x-request-id: 48303117-36b9-4849-a986-1985a202ddaa.
x-envoy-decorator-operation: webapp.istioinaction.svc.cluster.local:80/*.
x-envoy-peer-metadata: ChQKDkFQUF9DT05UQUlORVJTEgIaAAoaCgpDTFVTVEVSX0lEEgwaCkt1YmVybmV0ZXMKGwoMSU5TVEFOQ0VfSVBTEgsaCTEwLjEwLjAuNgoZCg1JU1RJT19WRVJTSU9OEggaBjEuMTcuOAqcAwoGTEFCRUxTEpEDKo4DCh0KA2FwcBIWGhRpc3Rpby1pbmdyZXNzZ2F0ZXdheQoTCgVjaGFydBIKGghnYXRld2F5cwoUCghoZXJpdGFnZRIIGgZUaWxsZXIKNgopaW5zdGFsbC5vcGVyYXRvci5pc3Rpby5pby9vd25pbmctcmVzb3VyY2USCRoHdW5rbm93bgoZCgVpc3RpbxIQGg5pbmdyZXNzZ2F0ZXdheQoZCgxpc3Rpby5pby9yZXYSCRoHZGVmYXVsdAowChtvcGVyYXRvci5pc3Rpby5pby9jb21wb25lbnQSERoPSW5ncmVzc0dhdGV3YXlzChIKB3JlbGVhc2USBxoFaXN0aW8KOQofc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtbmFtZRIWGhRpc3Rpby1pbmdyZXNzZ2F0ZXdheQovCiNzZXJ2aWNlLmlzdGlvLmlvL2Nhbm9uaWNhbC1yZXZpc2lvbhIIGgZsYXRlc3QKIgoXc2lkZWNhci5pc3Rpby5pby9pbmplY3QSBxoFZmFsc2UKGgoHTUVTSF9JRBIPGg1jbHVzdGVyLmxvY2FsCi4KBE5BTUUSJhokaXN0aW8taW5ncmVzc2dhdGV3YXktOTk2YmM2YmI2LXpuNTlqChsKCU5BTUVTUEFDRRIOGgxpc3Rpby1zeXN0ZW0KXQoFT1dORVISVBpSa3ViZXJuZXRlczovL2FwaXMvYXBwcy92MS9uYW1lc3BhY2VzL2lzdGlvLXN5c3RlbS9kZXBsb3ltZW50cy9pc3Rpby1pbmdyZXNzZ2F0ZXdheQoXChFQTEFURk9STV9NRVRBREFUQRICKgAKJwoNV09SS0xPQURfTkFNRRIWGhRpc3Rpby1pbmdyZXNzZ2F0ZXdheQ==.
x-envoy-peer-metadata-id: router~10.10.0.6~istio-ingressgateway-996bc6bb6-zn59j.istio-system~istio-system.svc.cluster.local.
x-envoy-attempt-count: 1.
x-b3-traceid: 36c65fbfc0eb90e77b80e483cd159800.
x-b3-spanid: 7b80e483cd159800.
x-b3-sampled: 0.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380e89aa3f7c404ba37d5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;wireshark 패킷으로 확인&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c23802f8798fa38b6fe6823&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhQoFR/btsNsqcxcFb/947EoCj75kZKE9cfQorwi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhQoFR/btsNsqcxcFb/947EoCj75kZKE9cfQorwi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhQoFR/btsNsqcxcFb/947EoCj75kZKE9cfQorwi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhQoFR%2FbtsNsqcxcFb%2F947EoCj75kZKE9cfQorwi0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1065&quot; height=&quot;675&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;675&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1d7b8b2c1c23803c8bb4dc995e2825f0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380ddb05aff3182f90243&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;전체 Flow에 대한 정보&lt;/code&gt; : 아래 첨부 pcap 파일 다운로드해서 확인하셔도 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;a id=&quot;block-1d7b8b2c1c2380ab845fce0ac992776b&quot; class=&quot;notion-link notion-file&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; border-radius: 3px; color: inherit;&quot; href=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/af7c537e-1d35-4b10-b996-afb90854d3c3/istio.pcap?table=block&amp;amp;id=1d7b8b2c-1c23-80ab-845f-ce0ac992776b&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1745020800000&amp;amp;signature=wNJ1RMRoPE7cJF0c-tp75iEt06TNVAluBhTRinYJhR0&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
&lt;div style=&quot;box-sizing: border-box; display: flex; padding: 5px 0px; margin: 2px 0px; transition: background 120ms ease-in; border-radius: var(--file-border-radii);&quot;&gt;
&lt;div class=&quot;notion-file__icon&quot; style=&quot;box-sizing: border-box; margin-inline: 2px 4px; width: 1.5rem; text-align: center;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem;&quot; class=&quot;notion-file__title&quot;&gt;istio.pcap&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; margin-inline-start: 6px; color: var(--color-text-default-light); font-size: 0.75rem;&quot; class=&quot;notion-file__size&quot;&gt;9.3KB&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/a&gt;
&lt;div class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 996px; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z2uHv/btsNsilvXQN/JhNi48G0pntz1O95FhPJq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z2uHv/btsNsilvXQN/JhNi48G0pntz1O95FhPJq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z2uHv/btsNsilvXQN/JhNi48G0pntz1O95FhPJq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ2uHv%2FbtsNsilvXQN%2FJhNi48G0pntz1O95FhPJq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1252&quot; height=&quot;365&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;365&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 996px; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238065a75cc724839453f9&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 996px; max-width: 100%;&quot;&gt;[Wireshark] Statistics - Flow Graph&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380508270d4b7174abc90&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;172.18.0.1 : docker network 중 kind 에서 사용하는 gateway ip&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238023b3f5f00ac7f727b1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;172.18.0.2 : myk8s-control-plane 노드(&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;실제로는 컨테이너&lt;/span&gt;) eth0 IP&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e292d4fd947fdb6c4f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;10.10.0.6 : istio-ingressgateway 파드 IP&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238064b822e9aaa8faa7df&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;10.10.0.9 : webapp 파드 IP&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23801f90aec7880ef2b8e2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;2번째가 마치 172.18.0.1 에서 10.10.10.6 연결 처럼 보이지만, 실제로는 172.18.0.2가 IP/Port NAT를 할때, 소스IP 유지로 표현됨&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23805286fdc9c2d44b3aa9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380a7a468df9831778a7f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;실습 완료 후 4.3 TLS 실습을 위해서 mTLS 활성화&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380e2a2b0fd60dae281c9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# PeerAuthentication 설정 제거
kubectl delete PeerAuthentication -n istio-system default
kubectl get PeerAuthentication -n istio-system

# 다시 인증서 확인
docker exec -it myk8s-control-plane istioctl proxy-config secret deploy/istio-ingressgateway.istio-system
RESOURCE NAME     TYPE           STATUS     VALID CERT     SERIAL NUMBER                               NOT AFTER                NOT BEFORE
default           Cert Chain     ACTIVE     true           155102144044256685798584897642001908841     2025-04-15T01:17:56Z     2025-04-14T01:15:56Z
ROOTCA            CA             ACTIVE     true           161890271456473083200656107031149708324     2035-04-12T01:17:47Z     2025-04-14T01:17:47Z&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238062b4d4fee81bd161a6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804bb8d9f068a391e7de&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.2.3 Overall view of traffic flow&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;전체적인 트래픽 흐름 개요&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23805eadb0d1234cbc3d55&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;게이트웨이&lt;/span&gt; 리소스는 서비스 메시 클러스터의 에지에서&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 리스닝&lt;/span&gt;하고자 하는 포트, 프로토콜, 가상 호스트를 정의한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c588e6fd6bc389d6e3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VirtualService&lt;/span&gt; 리소스는 에지에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;허용된 트래픽이 가야 할 곳&lt;/span&gt;을 정의한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380d09e1ed1ee47ee85fc&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23802bbedbc62df7c89180&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;471&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cP6I0v/btsNskQ80ox/cYFgyvn6FKKDg9S9f8vKxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cP6I0v/btsNskQ80ox/cYFgyvn6FKKDg9S9f8vKxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cP6I0v/btsNskQ80ox/cYFgyvn6FKKDg9S9f8vKxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcP6I0v%2FbtsNskQ80ox%2FcYFgyvn6FKKDg9S9f8vKxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;471&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;471&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23807987b4fd0a652394af&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.2.4 Istio ingress gateway vs. Kubernetes Ingress&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238009ba74c63e564d1369&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;쿠버네티스를 실행할 때 &amp;lsquo;왜 이스티오는 그냥 쿠버네티스 인그레스 v1 리소스를 인그레스로 지정하지 않는가?&amp;rsquo; 라는 의문이 생길 수 있다. 이스티오는 쿠버네티스 인그레스 v1 리소스를 지원하지만, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;쿠버네티스 인그레스 v1 사양에는 상당한 한계&lt;/span&gt;&lt;/span&gt;가 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23803eb34ad508b487ab4c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;첫 번째&lt;/span&gt; 한계는 쿠버네티스 인그레스 v1 의 사양이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HTTP&lt;/span&gt; 워크로드에 맞춰져 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;매우 단순&lt;/span&gt;하다는 점이다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d8a67ec2cfa7d3bf95&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실제로 인그레스 사양은 80포트와 443 포트만 인그레스 포인트로 간주한다. 이는 클러스터 운영자가 서비스 메시로 허용할 수 있는 트래픽 유형을 심각하게 제한한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238094b038c4fb6eb09155&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 카프카나 NATS.io 워크로드가 있다면, 이들 메시지 시스템에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TCP 커넥션&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;직접 노출&lt;/span&gt;하고 싶을 수 있다. 쿠버네티스 인그레스는 이를 허용하지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d7b8b2c1c238069ac12d8c2a902a3e3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;두 번째로, 쿠버네티스 인그레스 v1 리소스는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;사양&lt;/span&gt;이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;심각하게 부족&lt;/span&gt;하다는 점을 지적할 수 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380bb987cfede929150ca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;복잡한 트래픽 라우팅 규칙, 트래픽 분할, 트래픽 섀도잉 같은 것들을 지정하는 일반적인 방법이 없다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23807da368eefce2a06622&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 영역에서 사양이 부족한 까닭에 각 벤더는 인그레스 구현체(HAProxy, Nginx 등)에서 설정의 최적 구현법을 재창조해야했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d7b8b2c1c238007a568dcb6626ef445&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마지막으로, 사양이 부족하다 보니 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;벤더 대부분&lt;/span&gt;의 설정이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;디플로이먼트의 맞춤형 애노테이션으로 노출하는 방식&lt;/span&gt;을 택했다는 점을 꼽을 수 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238094bed1d036408e2e73&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 애노테이션은 벤더마다 상이하고 호환되지 않으므로, 이스티오가 이런 추세에 따랐다면 에지 게이트웨이로서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이의 모든 기능을 반영하기 위해 애노테이션이 더 많이 필요&lt;/span&gt;했을 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d7b8b2c1c238030a746ca145f4ea06d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;결국 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오는 인그레스 패턴&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;백지 상태에서 시작해 구축&lt;/span&gt;하기로 결정했고, 4계층(전송)과 5계층(세션) 속성을 7계층(애플리케이션) 라우팅 문제로부터 명확하게 분리해냈다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380808a5fd3fa72729b5c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Gateway&lt;/span&gt;&lt;/span&gt;는&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; L4/L5 &lt;/span&gt;&lt;/span&gt;문제를 처리하고, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VirtualService&lt;/span&gt;&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;L7&lt;/span&gt;&lt;/span&gt; 문제를 처리한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380d9898ad5ec62096bd5&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: var(--color-bg-gray-light); display: flex; margin-top: 2px; margin-bottom: 4px; border-color: var(--color-bg-gray-light); overflow: hidden; padding: var(--callout-padding); border-radius: var(--callout-border-radii); box-shadow: var(--callout-shadow);&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; display: var(--callout-icon-display); position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: var(--color-text-default-light);&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 987.016px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1d7b8b2c1c2380fa8679d06524134b05&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스 Gateway API - 이 책을 저술하는 시점(&amp;rsquo;21~22년)에 쿠버네티스 커뮤니티는 인그레스 v1 API를 대체하고자 Gateway API를 열심히 준비하고 있다. - 이 API는 책에서 다룬 Istio Gateway 및 VirtualService 리소스와 다른다. - Istio의 구현체와 리소스는 Gateway API 보다 먼저 등장했고, 여러 면에서 Gateway API에 영감을 줬다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23802faa9be98af3c4f377&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23809c9b8aee26e7f49bf4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.2.5 Istio ingress gateway vs. API gateways&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380a28fa9d8d114ca94b3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;API 게이트웨이는 조직이 네트워크나 아키텍처 경계의 서비스를 사용하는 클라이언트에게 서비스 구현의 세부 사항을 추상화활 수 있게 해준다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380eb9fbeea958bdecb3e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예컨대 클라이언트는 잘 문서화된 API들을 호출하게 되고, 이 API들은 앞뒤 호환성을 지니면서 발전하며, 셀프 서비스와 기타 사용 메커니즘을 제공할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d082bdf48c05f988a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 달성하려면 API 게이트웨이는 여러 보안 기술(OIDC, OAuth 2.0, LDAP)을 사용해 클라이언트를 식별할 수 있어야 하고, 메시지를 변형할 수 있어야 하며(SOAP &amp;rarr; REST, gRPC &amp;rarr; REST, 바디 및 헤더 텍스트 기반 변환 등), 비즈니스 수준으로 정교하게 속도를 제한할 수 있어야 하고, 자체 가입 기능이나 개발자 포털을 제공할 수 있어야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380a69444c127a937fc6a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 인그레스 게이트웨이는 이런 것들을 기본적으로는 제공하지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380839605e4dbb2e66a68&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메시 안팎에서 이런 역할을 수행하는 더욱 강력한 API 게이트웨이를 찾는다면, 엔보이 프록시를 기반으로 하는 &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://solo.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Solo.io&lt;/a&gt; Gloo Edge 같은 것을 살펴볼만 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380f6a363ffd3aaa99b24&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238081b24be8090a3041d4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380f9a22ac91fb7351ff3&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.3 Securing gateway traffic&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;게이트웨이 트래픽 보안&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d7b8b2c1c238000bc08c39690e3780d&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b5bd4ce62ef28f5693&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지금까지 Gateway, VirtualService 리소스를 사용해 이스티오 게이트웨이에서 기본 HTTP 서비스를 노출하는 방법을 살펴봤다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238092920ff4dd377d3023&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 외부(퍼블릭 인터넷 등)의 서비스를 클러스터 내부에서 실행 중인 서비스에 연결할 때, 인그레스 게이트웨이의 기본 기능 중 하나는 트래픽을 보호해 시스템의 신뢰 구축을 돕는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380709503f0cb218dc3c7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽 보호는 클라이언트가 통신하려는 서버의 진위를 가리는 것에서 시작할 수 있다. 자신이 그 서비스라고 주장하는 서비스가 정말 통신하려는 서비스가 맞는지 검증하는 것이다. 또한 누군가가 도청하는 일을 막고 싶으므로 트래픽을 암호화해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e5a860e7478d467dac&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 게이트웨이 구현을 사용하면 들어오는 TLS/SSL 트래픽을 종료하고, 백엔드 서비스로 전달하고, TLS가 아닌 트래픽을 적절한 TLS 포트로 리다이렉트하고, mTLS를 구현할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23800790d5e98298bdf733&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380049d0cd67dbe52dcf7&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.3.1 HTTP traffic with TLS&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238074ae12cd707cb465f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;MITM 공격을 방지하고 서비스 메시로 들어오는 모든 트래픽을 암호화하기 위해 이스티오 게이트웨이에 TLS를 설정할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238077b44ce1e9a9dfea83&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;들어오는 트래픽 모두가 HTTPS로 제공&lt;/span&gt;되도록 하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c48f7dce2ce0863884&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;MITM 공격이란 클라이언트가 어떤 서비스에 연결하려고 하지만, 그 서비스가 아닌 사칭 서비스에 언결할 때를 말한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23802da36ee0816278f771&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사칭 서비스는 통신에 접근할 수 있게 되며, 여기에는 민감 정보도 포함된다. TLS는 이 공격을 완화하는 데 도움을 준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380ff9590e3bfdb9edfaf&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23809ebd71fd02eee5ef60&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;수신 트래픽에 HTTPS를 활성화하려면 게이트웨이가 사용할 비공개 키와 인증서를 올바르게 지정해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380eab66bc66179e52fed&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서버가 제시하는 인증서는 서버가 클라이언트에게 자신의 정체를 알리는 방법이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d1a745ef443bae3a48&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증서&lt;/span&gt;란 기본적으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서버의 공개 키&lt;/span&gt;이며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;신뢰할 수 있는 기관인 인증 기관&lt;/span&gt; (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CA&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Certificate Authority&lt;/span&gt;)에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서명&lt;/span&gt;한 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380eeb0cfc9a4174baf52&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 클라이언트가 서버 인증서의 유효성을 판단하는 방법을 도식화한 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238057a26fe7bf51d63920&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;먼저 클라이언트에 CA 발급자의 인증서가 설치돼 있어야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238027b8f1ddf232e137b0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 이 발급자가 신뢰할 수 있는 CA이며 발급자가 발급한 인증서 역시 신뢰할 수 있다는 의미다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380059239ed7afd3ebb2b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;CA 인증서가 설치돼 있으면, 클라이언트는 인증서가 신뢰할 수 있는 CA가 서명한 것인지 검증할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238032a096f518a7e90f38&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그런 다음, 클라이언트는 인증서 내 공개 키를 사용해 서버로 보내는 트래픽을 암호화 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238081a3eefc7bc1ce5151&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서버는 비밀 키로 트래픽을 복호화 할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;583&quot; data-origin-height=&quot;321&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTULFU/btsNteCtq3I/ZC6vjWxrqwWfEmGY8Z1EUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTULFU/btsNteCtq3I/ZC6vjWxrqwWfEmGY8Z1EUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTULFU/btsNteCtq3I/ZC6vjWxrqwWfEmGY8Z1EUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTULFU%2FbtsNteCtq3I%2FZC6vjWxrqwWfEmGY8Z1EUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;583&quot; height=&quot;321&quot; data-origin-width=&quot;583&quot; data-origin-height=&quot;321&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div id=&quot;block-1d7b8b2c1c238093a2ebcd739603aa4d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238065b07cd51dfb302de3&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: var(--color-bg-gray-light); display: flex; margin-top: 2px; margin-bottom: 4px; border-color: var(--color-bg-gray-light); overflow: hidden; padding: var(--callout-padding); border-radius: var(--callout-border-radii); box-shadow: var(--callout-shadow);&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; display: var(--callout-icon-display); position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: var(--color-text-default-light);&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 959.047px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1d7b8b2c1c238058a8ebce7697f3bd06&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;앞 선 설명은 사실 정확하지 않다. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TLS handshake&lt;/span&gt; 에는 더 정교한 프로토콜이 포함되는데, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;최초 통신에는 공개/비공개 키(비대칭)를 조합&lt;/span&gt;하고, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TLS 세션에서 트래픽 암호화/복호화에 사용할 세션 키(대칭)&lt;/span&gt;을 생성한다.&lt;/p&gt;
&lt;p id=&quot;block-1d7b8b2c1c23805f8d72e942e1033164&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;즉, 최초에 TLS handshake에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;공개/비공개 키(비대칭)를 통해 세션을 맺고 이 과정에서 세션 키(대칭키)가 생성되어 이후에 TLS handshake가 완료된 TLS 세션에서는 세션 키(대칭키)를 사용한다&lt;/span&gt; TLS를 더 자세히 알고 싶다면 부록 C를 참조하자.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238062ac43f5b1c7fc3c9e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d0ad64cb1b721c33d5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본 istio-ingressgateway 가 인증서와 키를 사용하도록 설정하려면 먼저 인증서/키를 쿠버네티스 시크릿으로 만들어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238095acebfffe723a94d1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
docker exec -it myk8s-control-plane istioctl proxy-config secret deploy/istio-ingressgateway.istio-system
RESOURCE NAME     TYPE           STATUS     VALID CERT     SERIAL NUMBER                               NOT AFTER                NOT BEFORE
default           Cert Chain     ACTIVE     true           5384840145379860934113500875842526824       2025-04-14T11:51:01Z     2025-04-13T11:49:01Z
ROOTCA            CA             ACTIVE     true           218882737649632505517373517490277818381     2035-04-11T11:50:53Z     2025-04-13T11:50:53Z


# 파일 정보 확인
cat ch4/certs/3_application/private/webapp.istioinaction.io.key.pem # 비밀키(개인키)
cat ch4/certs/3_application/certs/webapp.istioinaction.io.cert.pem
openssl x509 -in ch4/certs/3_application/certs/webapp.istioinaction.io.cert.pem -noout -text
...
        Issuer: C=US, ST=Denial, O=Dis, CN=webapp.istioinaction.io
        Validity
            Not Before: Jul  4 12:49:32 2021 GMT
            Not After : Jun 29 12:49:32 2041 GMT
        Subject: C=US, ST=Denial, L=Springfield, O=Dis, CN=webapp.istioinaction.io
        ...
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Cert Type: 
                SSL Server
            Netscape Comment: 
                OpenSSL Generated Server Certificate
            X509v3 Subject Key Identifier: 
                87:0E:5E:A4:4C:A5:57:C5:6D:97:95:64:C4:7D:60:1E:BB:07:94:F4
            X509v3 Authority Key Identifier: 
                keyid:B9:F3:84:08:22:37:2C:D3:75:18:D2:07:C4:6F:4E:67:A9:0C:7D:14
                DirName:/C=US/ST=Denial/L=Springfield/O=Dis/CN=webapp.istioinaction.io
                serial:10:02:12
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication
...

# webapp-credential 시크릿 만들기
kubectl create -n istio-system secret tls webapp-credential \
--key ch4/certs/3_application/private/webapp.istioinaction.io.key.pem \
--cert ch4/certs/3_application/certs/webapp.istioinaction.io.cert.pem

# 확인 : krew view-secret
kubectl view-secret -n istio-system webapp-credential --all
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380b4a6f7ff05662912a3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23808a8e26f64bc3af4b9b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istio-system 네임스페이스에 시크릿을 만든다. 이 책을 저술하는 시점에서(istio 1.13.0) 게이트웨이의 TLS에서 사용하는 시크릿은 이스티오 인그레스 게이트웨이와 동일한 네임스페이스에 있을 때만 가져올 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23807a87f9fb08c3999739&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;운영 환경에서는 인그레스 게이트웨이를 istio-system과 분리해 자체 네임스페이스에서 실행해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238066962fc17a70da12be&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238052ae65e81415045fc2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 이스티오 게이트웨이 리소스가 인증서와 키를 사용하도록 설정할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380e79300fbc9d1f42cce&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;less&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: coolstore-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80  #1 HTTP 트래픽 허용
      name: http
      protocol: HTTP
    hosts:
    - &quot;webapp.istioinaction.io&quot;
  - port:
      number: 443 #2 HTTPS 트래픽 허용
      name: https 
      protocol: HTTPS
    tls:
      mode: SIMPLE #3 보안 연결
      credentialName: webapp-credential #4 TLS 인증서가 들어 있는 쿠버네티스 시크릿 이름(위에서 만든 tls secret)
    hosts:
    - &quot;webapp.istioinaction.io&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380748cfcd8177a174a07&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Gateway 리소스에서 인그레스 게이트웨이의 443 포트를 열고, 이를 HTTPS로 지정한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23802f858dee8856549b9c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 게이트웨이 설정에 tls 부분을 추가해 TLS에 사용할 인증서와 키의 위치를 지정한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23807592c4f7185d6a6287&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 위치가 앞서 istio-ingressgateway 에 마운트한 위치와 동일하다는 것을 확인하자.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380f89952db5236bbe765&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c1931cfa2f95e542c3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;설정해보자!&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380c2a47ced9b2f015d5e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
cat ch4/coolstore-gw-tls.yaml
kubectl apply -f ch4/coolstore-gw-tls.yaml -n istioinaction
gateway.networking.istio.io/coolstore-gateway configured

# 방금 생성한 gw의 tls secret에 의해 등록된 cert chain이 등록됨
docker exec -it myk8s-control-plane istioctl proxy-config secret deploy/istio-ingressgateway.istio-system
RESOURCE NAME                      TYPE           STATUS     VALID CERT     SERIAL NUMBER                               NOT AFTER                NOT BEFORE
default                            Cert Chain     ACTIVE     true           12401901870532937100071839722145404108      2025-04-17T14:44:27Z     2025-04-16T14:42:27Z
kubernetes://webapp-credential     Cert Chain     ACTIVE     true           1049106                                     2041-06-29T12:49:32Z     2021-07-04T12:49:32Z
ROOTCA                             CA             ACTIVE     true           213226523371779796801291257182983036466     2035-04-14T14:44:14Z     2025-04-16T14:44:14Z

# SDS에 의해서 ingressgateway에 secrets이 등록된것을 확인
kubectl stern -n istio-system -l app=istiod
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:35:37.015808Z   info    ads     Push debounce stable[32] 1 for config Gateway/istioinaction/coolstore-gateway: 101.667583ms since last change, 101.667208ms since last push, full=true
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:35:37.016109Z   info    ads     XDS: Pushing:2025-04-16T15:35:37Z/19 Services:13 ConnectedEndpoints:3 Version:2025-04-16T15:35:37Z/19
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:35:37.017275Z   info    ads     LDS: PUSH for node:istio-ingressgateway-996bc6bb6-5q245.istio-system resources:2 size:4.8kB
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:35:37.017731Z   info    ads     RDS: PUSH for node:istio-ingressgateway-996bc6bb6-5q245.istio-system resources:1 size:538B cached:0/0
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:35:37.029120Z   info    ads     SDS: PUSH request for node:istio-ingressgateway-996bc6bb6-5q245.istio-system resources:1 size:3.6kB cached:0/1
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:35:37.029387Z   info    ads     RDS: PUSH request for node:istio-ingressgateway-996bc6bb6-5q245.istio-system resources:1 size:577B cached:0/0 filtered:1

# 호출 테스트 1
curl -v -H &quot;Host: webapp.istioinaction.io&quot; https://localhost:30005/api/catalog
* Host localhost:30005 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:30005...
* Connected to localhost (::1) port 30005
* ALPN: curl offers h2,http/1.1
* (304) (OUT), TLS handshake, Client hello (1):
*  CAfile: /etc/ssl/cert.pem
*  CApath: none
* LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:30005 
* Closing connection
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:30005 
# 서버(istio-ingressgateway 파드)에서 제공하는 인증서는 기본 CA 인증서 체인을 사용해 확인할 수 없다는 의미다.
# curl 클라이언트에 적절한 CA 인증서 체인을 전달해보자.
# (호출 실패) 원인: (기본 인증서 경로에) 인증서 없음. 사설인증서 이므로 &amp;ldquo;사설CA 인증서(체인)&amp;rdquo; 필요

#
kubectl exec -it deploy/istio-ingressgateway -n istio-system -- ls -l /etc/ssl/certs
...
lrwxrwxrwx 1 root root     23 Oct  4  2023  f081611a.0 -&amp;gt; Go_Daddy_Class_2_CA.pem
lrwxrwxrwx 1 root root     47 Oct  4  2023  f0c70a8d.0 -&amp;gt; SSL.com_EV_Root_Certification_Authority_ECC.pem
lrwxrwxrwx 1 root root     44 Oct  4  2023  f249de83.0 -&amp;gt; Trustwave_Global_Certification_Authority.pem
lrwxrwxrwx 1 root root     41 Oct  4  2023  f30dd6ad.0 -&amp;gt; USERTrust_ECC_Certification_Authority.pem
lrwxrwxrwx 1 root root     34 Oct  4  2023  f3377b1b.0 -&amp;gt; Security_Communication_Root_CA.pem
lrwxrwxrwx 1 root root     24 Oct  4  2023  f387163d.0 -&amp;gt; Starfield_Class_2_CA.pem
lrwxrwxrwx 1 root root     18 Oct  4  2023  f39fc864.0 -&amp;gt; SecureTrust_CA.pem
lrwxrwxrwx 1 root root     20 Oct  4  2023  f51bb24c.0 -&amp;gt; Certigna_Root_CA.pem
lrwxrwxrwx 1 root root     20 Oct  4  2023  fa5da96b.0 -&amp;gt; GLOBALTRUST_2020.pem
...

#
cat ch4/certs/2_intermediate/certs/ca-chain.cert.pem
openssl x509 -in ch4/certs/2_intermediate/certs/ca-chain.cert.pem -noout -text
...
           X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:0
...


# 호출 테스트 2
curl -v -H &quot;Host: webapp.istioinaction.io&quot; https://localhost:30005/api/catalog \
--cacert ch4/certs/2_intermediate/certs/ca-chain.cert.pem
* Host localhost:30005 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:30005...
* Connected to localhost (::1) port 30005
* ALPN: curl offers h2,http/1.1
* (304) (OUT), TLS handshake, Client hello (1):
*  CAfile: ch4/certs/2_intermediate/certs/ca-chain.cert.pem
*  CApath: none
* LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:30005 
* Closing connection
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:30005
# (호출 실패) 원인: 인증실패. 서버인증서가 발급된(issued) 도메인 &amp;ldquo;webapp.istioinaction.io&amp;rdquo;로 호출하지 않음 (localhost로 호출함)


# 도메인 질의를 위한 임시 설정 : 실습 완료 후에는 삭제 해둘 것
echo &quot;127.0.0.1       webapp.istioinaction.io&quot; | sudo tee -a /etc/hosts
cat /etc/hosts | tail -n 1

# 호출 테스트 3
# webapp.istioinaction.io로 certfication과 함께 호출하니 성공!
curl -v https://webapp.istioinaction.io:30005/api/catalog \
--cacert ch4/certs/2_intermediate/certs/ca-chain.cert.pem

* Host webapp.istioinaction.io:30005 was resolved.
* IPv6: (none)
* IPv4: 127.0.0.1
*   Trying 127.0.0.1:30005...
* Connected to webapp.istioinaction.io (127.0.0.1) port 30005
* ALPN: curl offers h2,http/1.1
* (304) (OUT), TLS handshake, Client hello (1):
*  CAfile: ch4/certs/2_intermediate/certs/ca-chain.cert.pem
*  CApath: none
* (304) (IN), TLS handshake, Server hello (2):
* (304) (IN), TLS handshake, Unknown (8):
* (304) (IN), TLS handshake, Certificate (11):
* (304) (IN), TLS handshake, CERT verify (15):
* (304) (IN), TLS handshake, Finished (20):
* (304) (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / AEAD-CHACHA20-POLY1305-SHA256 / [blank] / UNDEF
* ALPN: server accepted h2
* Server certificate:
*  subject: C=US; ST=Denial; L=Springfield; O=Dis; CN=webapp.istioinaction.io
*  start date: Jul  4 12:49:32 2021 GMT
*  expire date: Jun 29 12:49:32 2041 GMT
*  common name: webapp.istioinaction.io (matched)
*  issuer: C=US; ST=Denial; O=Dis; CN=webapp.istioinaction.io
*  SSL certificate verify ok.
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://webapp.istioinaction.io:30005/api/catalog
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: webapp.istioinaction.io:30005]
* [HTTP/2] [1] [:path: /api/catalog]
* [HTTP/2] [1] [user-agent: curl/8.7.1]
* [HTTP/2] [1] [accept: */*]
&amp;gt; GET /api/catalog HTTP/2
&amp;gt; Host: webapp.istioinaction.io:30005
&amp;gt; User-Agent: curl/8.7.1
&amp;gt; Accept: */*
&amp;gt; 
* Request completely sent off
&amp;lt; HTTP/2 200 
&amp;lt; content-length: 357
&amp;lt; content-type: application/json; charset=utf-8
&amp;lt; date: Wed, 16 Apr 2025 15:39:56 GMT
&amp;lt; x-envoy-upstream-service-time: 6
&amp;lt; server: istio-envoy
&amp;lt; 
* Connection #0 to host webapp.istioinaction.io left intact
[{&quot;id&quot;:1,&quot;color&quot;:&quot;amber&quot;,&quot;department&quot;:&quot;Eyewear&quot;,&quot;name&quot;:&quot;Elinor Glasses&quot;,&quot;price&quot;:&quot;282.00&quot;},{&quot;id&quot;:2,&quot;color&quot;:&quot;cyan&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Atlas Shirt&quot;,&quot;price&quot;:&quot;127.00&quot;},{&quot;id&quot;:3,&quot;color&quot;:&quot;teal&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Small Metal Shoes&quot;,&quot;price&quot;:&quot;232.00&quot;},{&quot;id&quot;:4,&quot;color&quot;:&quot;red&quot;,&quot;department&quot;:&quot;Watches&quot;,&quot;name&quot;:&quot;Red Dragon Watch&quot;,&quot;price&quot;:&quot;232.00&quot;}

open https://webapp.istioinaction.io:30005
open https://webapp.istioinaction.io:30005/api/catalog

# http 접속도 확인해보자
curl -v http://webapp.istioinaction.io:30000/api/catalog
open http://webapp.istioinaction.io:30000
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380218ba5ebfbb25221aa&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b5b712e92f62fb7fb0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 종단 간 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;end-to-end&lt;/span&gt; 암호화를 달성했음을 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380388eebfaddcf023059&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;우리는 이스티오 게이트웨이를 향하는 트래픽을 암호화함으로써 보호한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380df8620de0400a6cdaf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 인그레스 게이트웨이는 TLS 커넥션을 종료하고, 트래픽을 서비스 메시 내에서 실행 중인 뒷단의 webapp 서비스로 보낸다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238086be7dd8a13e39e768&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istio-ingressgateway 와 webapp 서비스 사이의 홉은 서비스의 ID를 사용해 암호화한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380a0a075cb6cedff71b1&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23805e87ddd510ed490975&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;325&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUkHsn/btsNsc6WbW9/zi1pMEPEj44UJtKY8SQ1S1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUkHsn/btsNsc6WbW9/zi1pMEPEj44UJtKY8SQ1S1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUkHsn/btsNsc6WbW9/zi1pMEPEj44UJtKY8SQ1S1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUkHsn%2FbtsNsc6WbW9%2Fzi1pMEPEj44UJtKY8SQ1S1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;526&quot; height=&quot;325&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;325&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238038880be6d23f1a6a52&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: var(--color-bg-gray-light); display: flex; margin-top: 2px; margin-bottom: 4px; border-color: var(--color-bg-gray-light); overflow: hidden; padding: var(--callout-padding); border-radius: var(--callout-border-radii); box-shadow: var(--callout-shadow);&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; display: var(--callout-icon-display); position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: var(--color-text-default-light);&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 987.016px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1d7b8b2c1c2380a6a5f9f2b856144fdf&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;인증서 워크플로우를 외부 CA 또는 자체적인 내부 PKI와 통합하고 싶을 수 있다. 통합하는 데는 cert-manager 등을 사용할 수 있으며, 자세한 정보는 공식 문서 참고하자. &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://cert-manager.io/docs/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://cert-manager.io/docs/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23807eb9d6d556784512de&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238004852fc076e966c8bd&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.3.2 HTTP redirect to HTTPS&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380fc9191efb5fcc37f7c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;모든 트래픽 항상 TLS를 쓰도록 강제, HTTP 트래픽을 강제로 리다이렉트하게 Gateway 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23808f88f5d00f5cfeba13&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: coolstore-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - &quot;webapp.istioinaction.io&quot;
    tls:
      httpsRedirect: true 
  - port:
      number: 443
      name: https
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: webapp-credential
    hosts:
    - &quot;webapp.istioinaction.io&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23807aaa5df955d992564e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380baa725e6649947a5f4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실행&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23809aa5a9d513d94d43ff&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
kubectl apply -f ch4/coolstore-gw-tls-redirect.yaml

# HTTP 301 리다이렉트
curl -v http://webapp.istioinaction.io:30000/api/catalog
* Host webapp.istioinaction.io:30000 was resolved.
* IPv6: (none)
* IPv4: 127.0.0.1
*   Trying 127.0.0.1:30000...
* Connected to webapp.istioinaction.io (127.0.0.1) port 30000
&amp;gt; GET /api/catalog HTTP/1.1
&amp;gt; Host: webapp.istioinaction.io:30000
&amp;gt; User-Agent: curl/8.7.1
&amp;gt; Accept: */*
&amp;gt; 
* Request completely sent off
&amp;lt; HTTP/1.1 301 Moved Permanently
&amp;lt; location: https://webapp.istioinaction.io:30000/api/catalog
&amp;lt; date: Wed, 16 Apr 2025 15:42:14 GMT
&amp;lt; server: istio-envoy
&amp;lt; content-length: 0
&amp;lt; 
* Connection #0 to host webapp.istioinaction.io left intac&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238053b93fcd75acd6a4ce&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 리다이렉트는 클라이언트에게 API의 HTTPS 버전을 호출하라고 지시한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23803eb3bbf80368e52f6a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23807faecff6d01a243761&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.3.3 HTTP traffic with mutual TLS&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806c9831cc8746316563&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞 절에서는 표준 TLS를 사용해 서버가 자신의 정체를 클라이언트에게 증명하게 했다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238067b998ea732738e4a1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그런데 만약 클러스터 외부의 트래픽을 받아들이기 전에 클라이언트가 누군지 검증하고 싶다면 어떻게 해야 할까?&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804c8ea5e807efa0deec&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;단순 TLS 시나리오에서는 서버가 자신의 공개 인증서를 클라이언트에게 보냈고, 클라이언트는 서버의 인증서에 서명한 CA를 신뢰할 수 있음을 검증했다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380f5a0cad4099da53a3a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;우리는 클라이언트가 자신의 공개 인증서를 보내게 하고 서버가 인증서를 신뢰하는지 검증하게 하고 싶다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380e8bafcea4b9610f25b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 mTLS 프로토콜에서 클라이언트와 서버 모두가 어떻게 서로의 인증서를 검증하는지, 즉 어떻게 서로 인증하는지 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23808d8aa8edd1bdec4d30&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그리고 인증서는 트래픽을 암호화하는 데 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23803ca8cdced229d552ea&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238098bf5ced75c29829ad&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/URqq8/btsNrWpH5AK/b9K9q8sK6AaZpb0h6IWGnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/URqq8/btsNrWpH5AK/b9K9q8sK6AaZpb0h6IWGnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/URqq8/btsNrWpH5AK/b9K9q8sK6AaZpb0h6IWGnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FURqq8%2FbtsNrWpH5AK%2Fb9K9q8sK6AaZpb0h6IWGnk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;619&quot; height=&quot;338&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IUlaF/btsNrybETGN/F3SD3EmthP44HAKrLrrB0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IUlaF/btsNrybETGN/F3SD3EmthP44HAKrLrrB0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IUlaF/btsNrybETGN/F3SD3EmthP44HAKrLrrB0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIUlaF%2FbtsNrybETGN%2FF3SD3EmthP44HAKrLrrB0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;837&quot; height=&quot;490&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23800d927df90ff0342ef6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380ce98bbfdca0493142f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본 istio-ingressgateway 가 mTLS 커넥션에 참여하도록 구성하려면, 클라이언트의 인증서를 검증하는 데 사용할 수 있도록 CA 인증서 집합을 제공해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238056ba05e355e38d2c7e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞 절에서 했던 것처럼, 쿠버네티스 시크릿으로 istio-ingressgateway 에서 이 CA 인증서(더 구체적으로 인증서 체인)를 사용할 수 있게 해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238035a71cfb69e7dd81c1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;적절한 CA 인증서 체인으로 istio-ingressgateway-ca-cert 시크릿을 구성하는 것으로 시작하겠다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380c1a752e281280bb5d4&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;gradle&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 인증서 파일들 확인
cat ch4/certs/3_application/private/webapp.istioinaction.io.key.pem
cat ch4/certs/3_application/certs/webapp.istioinaction.io.cert.pem
cat ch4/certs/2_intermediate/certs/ca-chain.cert.pem # Setigo와 같은 intermediate CA 이다!
openssl x509 -in ch4/certs/2_intermediate/certs/ca-chain.cert.pem -noout -text

# Secret 생성 : (적절한 CA 인증서 체인) 클라이언트 인증서
# application용(server용) privatekey와 certification 뿐만아니라, intermediate CA chain을 통해서 CA 인증서 체인을 만들어야 client에서 제공하는 key를 검증 할 수 있다!!

kubectl create -n istio-system secret \
generic webapp-credential-mtls --from-file=tls.key=\
ch4/certs/3_application/private/webapp.istioinaction.io.key.pem \
--from-file=tls.crt=\
ch4/certs/3_application/certs/webapp.istioinaction.io.cert.pem \
--from-file=ca.crt=\
ch4/certs/2_intermediate/certs/ca-chain.cert.pem

# 확인
kubectl view-secret -n istio-system webapp-credential-mtls --all
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23808daff8d69a052ff202&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380c8b30bc1e8c636f279&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이제 CA 인증서 체인의 위치를 가리키도록 이스티오 Gateway 리소스를 업데이트하고, expected 프로토콜을 mTLS로 구성하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380e2b1c9c97caa2ec159&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: coolstore-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - &quot;webapp.istioinaction.io&quot;
  - port:
      number: 443
      name: https
      protocol: HTTPS
    tls:
      mode: MUTUAL # mTLS 설정
      credentialName: webapp-credential-mtls # 신뢰할 수 있는 CA가 구성된 자격 증명
    hosts:
    - &quot;webapp.istioinaction.io&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238082883ed12582b6df7d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238079942eec32336a60d3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실행&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23801e80d5f5cee3565f6d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
kubectl apply -f ch4/coolstore-gw-mtls.yaml -n istioinaction
gateway.networking.istio.io/coolstore-gateway configured

# (옵션) SDS 로그 확인
kubectl stern -n istio-system -l app=istiod
istiod-7df6ffc78d-2x2lh discovery 2025-04-16T15:51:25.325519Z     info    ads     SDS: PUSH request for node:istio-ingressgateway-996bc6bb6-5q245.istio-system resources:2 size:7.7kB cached:0/2 filtered:1...

# mtls용 CA와 Cert Chain이 생성된것을 확인!
docker exec -it myk8s-control-plane istioctl proxy-config secret deploy/istio-ingressgateway.istio-system
RESOURCE NAME                                  TYPE           STATUS     VALID CERT     SERIAL NUMBER                               NOT AFTER                NOT BEFORE
default                                        Cert Chain     ACTIVE     true           12401901870532937100071839722145404108      2025-04-17T14:44:27Z     2025-04-16T14:42:27Z
kubernetes://webapp-credential                 Cert Chain     ACTIVE     true           1049106                                     2041-06-29T12:49:32Z     2021-07-04T12:49:32Z
kubernetes://webapp-credential-mtls            Cert Chain     ACTIVE     true           1049106                                     2041-06-29T12:49:32Z     2021-07-04T12:49:32Z
ROOTCA                                         CA             ACTIVE     true           213226523371779796801291257182983036466     2035-04-14T14:44:14Z     2025-04-16T14:44:14Z
kubernetes://webapp-credential-mtls-cacert     CA             ACTIVE     true           1049106                                     2041-06-29T12:49:29Z     2021-07-04T12:49:29Z

# 호출 테스트 1 : (호출실패) 클라이언트 인증서 없음 - SSL 핸드섀이크가 성공하지 못하여 거부됨
curl -v https://webapp.istioinaction.io:30005/api/catalog \
--cacert ch4/certs/2_intermediate/certs/ca-chain.cert.pem

# 웹브라우저에서 확인 시 클라이언트 인증서 확인되지 않아서 접속 실패 확인
open https://webapp.istioinaction.io:30005
open https://webapp.istioinaction.io:30005/api/catalog


# 호출 테스트 2 : 클라이언트 인증서/키 추가 성공!
curl -v https://webapp.istioinaction.io:30005/api/catalog \
--cacert ch4/certs/2_intermediate/certs/ca-chain.cert.pem \
--cert ch4/certs/4_client/certs/webapp.istioinaction.io.cert.pem \
--key ch4/certs/4_client/private/webapp.istioinaction.io.key.pem

* Host webapp.istioinaction.io:30005 was resolved.
* IPv6: (none)
* IPv4: 127.0.0.1
*   Trying 127.0.0.1:30005...
* Connected to webapp.istioinaction.io (127.0.0.1) port 30005
* ALPN: curl offers h2,http/1.1
* (304) (OUT), TLS handshake, Client hello (1):
*  CAfile: ch4/certs/2_intermediate/certs/ca-chain.cert.pem
*  CApath: none
* (304) (IN), TLS handshake, Server hello (2):
* (304) (IN), TLS handshake, Unknown (8):
* (304) (IN), TLS handshake, Request CERT (13):
* (304) (IN), TLS handshake, Certificate (11):
* (304) (IN), TLS handshake, CERT verify (15):
* (304) (IN), TLS handshake, Finished (20):
* (304) (OUT), TLS handshake, Certificate (11):
* (304) (OUT), TLS handshake, CERT verify (15):
* (304) (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / AEAD-CHACHA20-POLY1305-SHA256 / [blank] / UNDEF
* ALPN: server accepted h2
* Server certificate:
*  subject: C=US; ST=Denial; L=Springfield; O=Dis; CN=webapp.istioinaction.io
*  start date: Jul  4 12:49:32 2021 GMT
*  expire date: Jun 29 12:49:32 2041 GMT
*  common name: webapp.istioinaction.io (matched)
*  issuer: C=US; ST=Denial; O=Dis; CN=webapp.istioinaction.io
*  SSL certificate verify ok.
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://webapp.istioinaction.io:30005/api/catalog
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: webapp.istioinaction.io:30005]
* [HTTP/2] [1] [:path: /api/catalog]
* [HTTP/2] [1] [user-agent: curl/8.7.1]
* [HTTP/2] [1] [accept: */*]
&amp;gt; GET /api/catalog HTTP/2
&amp;gt; Host: webapp.istioinaction.io:30005
&amp;gt; User-Agent: curl/8.7.1
&amp;gt; Accept: */*
&amp;gt; 
* Request completely sent off
&amp;lt; HTTP/2 200 
&amp;lt; content-length: 357
&amp;lt; content-type: application/json; charset=utf-8
&amp;lt; date: Wed, 16 Apr 2025 15:53:07 GMT
&amp;lt; x-envoy-upstream-service-time: 11
&amp;lt; server: istio-envoy
&amp;lt; 
* Connection #0 to host webapp.istioinaction.io left intact
[{&quot;id&quot;:1,&quot;color&quot;:&quot;amber&quot;,&quot;department&quot;:&quot;Eyewear&quot;,&quot;name&quot;:&quot;Elinor Glasses&quot;,&quot;price&quot;:&quot;282.00&quot;},{&quot;id&quot;:2,&quot;color&quot;:&quot;cyan&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Atlas Shirt&quot;,&quot;price&quot;:&quot;127.00&quot;},{&quot;id&quot;:3,&quot;color&quot;:&quot;teal&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Small Metal Shoes&quot;,&quot;price&quot;:&quot;232.00&quot;},{&quot;id&quot;:4,&quot;color&quot;:&quot;red&quot;,&quot;department&quot;:&quot;Watches&quot;,&quot;name&quot;:&quot;Red Dragon Watch&quot;,&quot;price&quot;:&quot;232.00&quot;}]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238091a5e1e46718426554&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 게이트웨이는 istio-proxy 를 시작하는 데 사용하는 istio-agent 프로세스에 내장된 SDS에서 인증서를 가져온다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238076ac3dd6b19edbbbec&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;SDS는 업데이트를 자동으로 전파해야 하는 동적 API이다. 서비스 프록시도 마찬가지다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380b1aa8fd1ca9d610ba5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380ec930cd8e61551313e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.3.4 Serving multiple virtual hosts with TLS&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23805cb353d0dc3bcc75e1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 인그레스 게이트웨이는 동일한 HTTPS 포트(443)에서 자체 인증서와 비밀 키가 있는 여러 가상 호스트를 서빙할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380099495c70eb1d5e305&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 위해 동일 포트 및 프로토콜에 여러 항목을 추가한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238035a909f3e7e10ac659&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 자체 인증서와 키 쌍이 있는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;webapp&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;.istioinaction.io&lt;/code&gt; 와 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;catalog&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;.istioinaction.io&lt;/code&gt; 서비스를 둘 다 추가할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23806393e2cff389b9b852&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;HTTPS로 서빙하는 가상 호스트를 여럿 기술하고 있는 이스티오 Gateway 리소스는 다음과 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380dfbbbdd5d43b221a02&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;less&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: coolstore-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 443
      name: https-webapp
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: webapp-credential
    hosts:
    - &quot;webapp.istioinaction.io&quot;
  - port:
      number: 443
      name: https-catalog
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: catalog-credential
    hosts:
    - &quot;catalog.istioinaction.io&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b8919cc84972750ffa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;둘 다 443 포트 리스닝하고 HTTPS 를 서빙하지만, 호스트이름이 다르다는 것을 유의하자.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238012811dcc6917be3b52&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380df88bbf8dd82e18346&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;각 항목에는 서빙하는 가상 호스트용으로 사용하는 고유한 인증서와 키가 있다. 이를 위해 인증서와 키를 추가하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380e68beec2f31776761d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
cat ch4/certs2/3_application/private/catalog.istioinaction.io.key.pem
cat ch4/certs2/3_application/certs/catalog.istioinaction.io.cert.pem
openssl x509 -in ch4/certs2/3_application/certs/catalog.istioinaction.io.cert.pem -noout -text
...
        Issuer: C=US, ST=Denial, O=Dis, CN=catalog.istioinaction.io
        Validity
            Not Before: Jul  4 13:30:38 2021 GMT
            Not After : Jun 29 13:30:38 2041 GMT
        Subject: C=US, ST=Denial, L=Springfield, O=Dis, CN=catalog.istioinaction.io
...

#
kubectl create -n istio-system secret tls catalog-credential \
--key ch4/certs2/3_application/private/catalog.istioinaction.io.key.pem \
--cert ch4/certs2/3_application/certs/catalog.istioinaction.io.cert.pem

# Gateway 설정 업데이트
kubectl apply -f ch4/coolstore-gw-multi-tls.yaml -n istioinaction

kubectl get gw -n istioinaction coolstore-gateway -o yaml 
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  annotations:
		...
  generation: 4
  name: coolstore-gateway
  namespace: istioinaction
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - webapp.istioinaction.io
    port:
      name: https-webapp
      number: 443
      protocol: HTTPS
    tls:
      credentialName: webapp-credential
      mode: SIMPLE
  - hosts:
    - catalog.istioinaction.io
    port:
      name: https-catalog
      number: 443
      protocol: HTTPS
    tls:
      credentialName: catalog-credential
      mode: SIMPLE

# Gateway 로 노출한 catalog 서비스용 VirtualService 리소스 생성
cat ch4/catalog-vs.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: catalog-vs-from-gw
spec:
  hosts:
  - &quot;catalog.istioinaction.io&quot;
  gateways:
  - coolstore-gateway
  http:
  - route:
    - destination:
        host: catalog # catalog pod의 service
        port:
          number: 80  # catalog svc의 port(targetPort 아님)

#          
kubectl apply -f ch4/catalog-vs.yaml -n istioinaction
kubectl get gw,vs -n istioinaction

# 도메인 질의를 위한 임시 설정 : 실습 완료 후에는 삭제 해둘 것
echo &quot;127.0.0.1       catalog.istioinaction.io&quot; | sudo tee -a /etc/hosts
cat /etc/hosts | tail -n 2


# 호출테스트 1 - webapp.istioinaction.io
curl -v https://webapp.istioinaction.io:30005/api/catalog \
--cacert ch4/certs/2_intermediate/certs/ca-chain.cert.pem

# 호출테스트 2 - catalog.istioinaction.io (cacert 경로가 ch4/certs2/* 임에 유의)
curl -v https://catalog.istioinaction.io:30005/items \
--cacert ch4/certs2/2_intermediate/certs/ca-chain.cert.pem

* Host catalog.istioinaction.io:30005 was resolved.
* IPv6: (none)
* IPv4: 127.0.0.1
*   Trying 127.0.0.1:30005...
* Connected to catalog.istioinaction.io (127.0.0.1) port 30005
* ALPN: curl offers h2,http/1.1
* (304) (OUT), TLS handshake, Client hello (1):
*  CAfile: ch4/certs2/2_intermediate/certs/ca-chain.cert.pem
*  CApath: none
* (304) (IN), TLS handshake, Server hello (2):
* (304) (IN), TLS handshake, Unknown (8):
...
&amp;lt; 
[
  {
    &quot;id&quot;: 1,
    &quot;color&quot;: &quot;amber&quot;,
    &quot;department&quot;: &quot;Eyewear&quot;,
    &quot;name&quot;: &quot;Elinor Glasses&quot;,
    &quot;price&quot;: &quot;282.00&quot;
  },
  {
    &quot;id&quot;: 2,
    &quot;color&quot;: &quot;cyan&quot;,
    &quot;department&quot;: &quot;Clothing&quot;,
    &quot;name&quot;: &quot;Atlas Shirt&quot;,
    &quot;price&quot;: &quot;127.00&quot;
  },
  {
    &quot;id&quot;: 3,
    &quot;color&quot;: &quot;teal&quot;,
    &quot;department&quot;: &quot;Clothing&quot;,
    &quot;name&quot;: &quot;Small Metal Shoes&quot;,
    &quot;price&quot;: &quot;232.00&quot;
  },
  {
    &quot;id&quot;: 4,
    &quot;color&quot;: &quot;red&quot;,
    &quot;department&quot;: &quot;Watches&quot;,
    &quot;name&quot;: &quot;Red Dragon Watch&quot;,
    &quot;price&quot;: &quot;232.00&quot;
  }
* Connection #0 to host catalog.istioinaction.io left intact
]%&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23803eaa38c1b90a11bd8e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380609054c923394c3253&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;두 호출 모두 동일한 응답으로 성공했다. 그런데 발신자마다 어떤 인증서를 제시해야 하는지를 이스티오 인그레스가 어떻게 아는지가 궁금할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380b2bdc3e84f6a0ef7e2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 커넥션들이 열린 포트는 하나인데, 게이트웨이는 클라이언트가 접근하려는 서비스가 어느것이고 그 서비스에 해당하는 인증서가 어느 것인지를 알 수 있을까?&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23802cb02de30b81431db3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;해답은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI&lt;/span&gt;(서버 이름 표시)라는 TLS 확장에 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c238020b90ecb8be03f6af7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본적으로 HTTPS 커넥션이 만들어지면 클라이언트는 먼저 TLS 핸드셰이크의 ClientHello 부분에서 어느 서비스에 접근해야 하는지부터 전달한다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c23807e9c4af1ba8c6d5828&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 게이트웨이(엄밀히는 엔보이)가 TLS의 SNI를 구현하는 덕분에 올바른 인증서를 제시할 수 있고 올바른 서비스로 라우팅 할 수 있는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380a4a227d19b7de4bcd3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23804faedbda833daabba0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;HTTPS&lt;/code&gt; 경우 TLS CliendHello 의 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;SNI&lt;/code&gt;의 Server Name 에서 주소를 확인 후 통제합니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23805b9ae1e9f6dfc07e28&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Squid v3.5 부터 SslPeekAndSplice 기능으로 TLS ClientHello 의 SNI 값(URL 주소) 기반 통제 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c23800ab913d82b2847282f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fa30c5dce-1d1b-4bd1-b17f-985e8c16f916%2Ftls.png?id=1d7b8b2c-1c23-800a-b913-d82b2847282f&amp;amp;table=block&quot; alt=&quot;[그림 2-1-2-2] HTTPS 의 TLS 협상 과정&quot; width=&quot;432&quot; height=&quot;352&quot; /&gt;[그림 2-1-2-2] HTTPS 의 TLS 협상 과정&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380bdaaafed028699b2cd&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F3692bcbb-96c2-478d-9d20-b8a1644aa130%2F_2020-07-23__9.12.03.png?id=1d7b8b2c-1c23-80bd-aaaf-ed028699b2cd&amp;amp;table=block&quot; alt=&quot;[그림 2-1-2-3] TLS Client Hello 패킷 SNI 확장헤더의 Server Name 의 주소로 통제&quot; width=&quot;576&quot; height=&quot;647.2145454545454&quot; /&gt;[그림 2-1-2-3] TLS Client Hello 패킷 SNI 확장헤더의 Server Name 의 주소로 통제&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c238038bdfbce70b53acca0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;위 그림에서 보는 것처럼 TLS Packet의 Extension header를 보면 SNI가 있고, 해당 SNI의 Server Name을 통해서 어떤 server로의 요청인지 istio-ingressgateway(정확히는 envoy)가 알 수 있고 해당 요청을 gw, vs를 통해 upstream으로 전송 할 수 있게된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238085b300f61adff048d5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c23801192d3e98742d1202b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;https 트래픽 패킷 확인 : TLSv1에 Handshake Type(Client Hello) 에 Extension 에 SNI 부분에 도메인 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c238033804be347392b5feb&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# NodePort 30005는 istio-ingressgateway 에 8443(https)로 전달
docker exec -it myk8s-control-plane tcpdump -i eth0 tcp port 30005 -nn -w /root/test3.pcap

# 호출테스트 1 - webapp.istioinaction.io
curl -v https://webapp.istioinaction.io:30005/api/catalog \
--cacert ch4/certs/2_intermediate/certs/ca-chain.cert.pem

# 호출테스트 2 - catalog.istioinaction.io (cacert 경로가 ch4/certs2/* 임에 유의)
curl -v https://catalog.istioinaction.io:30005/items \
--cacert ch4/certs2/2_intermediate/certs/ca-chain.cert.pem

#
docker cp myk8s-control-plane:/root/test3.pcap ./
wireshark&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c23802180d6f91be4b7ea11&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c238049903beef1eac424c8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgf4cf/btsNsORMbJR/H8UoX8EzRtHydk5MIlqSa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgf4cf/btsNsORMbJR/H8UoX8EzRtHydk5MIlqSa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgf4cf/btsNsORMbJR/H8UoX8EzRtHydk5MIlqSa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbgf4cf%2FbtsNsORMbJR%2FH8UoX8EzRtHydk5MIlqSa1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;758&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;758&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380d9933be2ecea22ae93&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 절에서는 인그레스 게이트웨이에서 서로 다른 가상 호스트들을 노출했고, 동일한 HTTPS 포트에서 각자를 고유한 인증서로 서비스해봤다.&lt;/li&gt;
&lt;li id=&quot;block-1d7b8b2c1c2380eea38fe74d9bcb0d32&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다음 절에서는 TCP 트래픽을 살펴본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d7b8b2c1c2380db84a8e9835e9373db&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23803bbb59dd8fce88eb56&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d7b8b2c1c23800eacfbe87f2d990c31&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c23806ba796e22e4a986d6b&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.4 TCP traffic&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380649285c9afd35d02a1&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c238014beb1f13265ab1a72&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 게이트웨이는 HTTP/HTTPS 트래픽뿐 아니라 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TCP&lt;/span&gt;로 접근하는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 모든 트래픽을 처리&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c23800c80d4f2a84d88fc69&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어, 인그레스 게이트웨이로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터베이스&lt;/span&gt;(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;MongoDB&lt;/span&gt; 등)나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메시지 큐&lt;/span&gt;(카프카 등)를 노출할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380c09dd2ff264ad32e11&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 트래픽을&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt; 단순 TCP로 다루면 재시도, 요청 수준 서킷 브레이킹, 복잡한 라우팅 등과 같은 유용한 기능을 사용할 수 없다&lt;/span&gt;.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380308507ef258af144da&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;단순히&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt; 이스티오가 어떤 프로토콜을 사용하는지 분간할 수 없기 때문&lt;/span&gt;이다. (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;MongoDB 처럼 이스티오-&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;가 이해하는 프로토콜&lt;/span&gt;을 사용하는 것이 아닌 이상).&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380d184c8e6f8e4293650&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클러스터 외부의 클라이언트가 클러스터 내에서 실행 중인 서비스와 통신할 수 있도록 이스티오 게이트웨이에 TCP 트래픽을 노출하는 방법을 알아보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380c7a4d1dff583853462&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c23800a8800c0e9ee31af04&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.4.1 Exposing TCP ports on an Istio gateway&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;i&gt; &lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rarr; 실습 컨테이너 이미지를 istio-echo-server 변경 만들어 둘것 - &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/istio/istio/tree/master/samples/tcp-echo&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://hub.docker.com/r/istio/tcp-echo-server&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Dockerhub&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380a9b6d8c8a2b170b06d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;가장 먼저 해야 할일은 서비스 메시 내에서 TCP 기반 서비스를 만드는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380f396ffc7c3b5ce5837&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 예제는 깃허브의 에코 서비스를 사용한다. &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/cjimti/go-echo&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/cjimti/go-echo&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380eaaa36e45a603282e7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 TCP 서비스는 Telnet 같은 간단한 TCP 클라이언트로 접속해 명령어를 입력하면 그대로 되돌려준다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380799d6ed84f6fbf85bb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;배포 실행 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://hub.docker.com/r/cjimti/go-echo/tags&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;dockerhub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c23807caa98c8653cc76d82&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
cat ch4/echo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tcp-echo-deployment
  labels:
    app: tcp-echo
    system: example
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tcp-echo
  template:
    metadata:
      labels:
        app: tcp-echo
        system: example
    spec:
      containers:
        - name: tcp-echo-container
          image: cjimti/go-echo:latest
          imagePullPolicy: IfNotPresent
          env:
            - name: TCP_PORT
              value: &quot;2701&quot;
            - name: NODE_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: SERVICE_ACCOUNT
              valueFrom:
                fieldRef:
                  fieldPath: spec.serviceAccountName
          ports:
            - name: tcp-echo-port
              containerPort: 2701
---
apiVersion: v1
kind: Service
metadata:
  name: &quot;tcp-echo-service&quot;
  labels:
    app: tcp-echo
    system: example
spec:
  selector:
    app: &quot;tcp-echo&quot;
  ports:
    - protocol: &quot;TCP&quot;
      port: 2701
      targetPort: 2701

kubectl apply -f ch4/echo.yaml -n istioinaction

#

kubectl get pod -n istioinaction

NAME                                   READY   STATUS    RESTARTS   AGE
catalog-6cf4b97d-b99jw                 2/2     Running   0          43h
tcp-echo-deployment-584f6d6d6b-w9wsr   2/2     Running   0          9s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380f0a793c39bcc0cecb1&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380f3b0e5d21266ec547c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c238069b033cfbcc59d7e97&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vim&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# tcp 서빙 포트 추가 : 편집기는 vi 대신 nano 선택 &amp;lt;- 편한 툴 사용
KUBE_EDITOR=&quot;nano&quot;  kubectl edit svc istio-ingressgateway -n istio-system
...
  - name: tcp
    nodePort: 30006
    port: 31400
    protocol: TCP
    targetPort: 31400
...

# 확인
kubectl get svc istio-ingressgateway -n istio-system -o jsonpath='{.spec.ports[?(@.name==&quot;tcp&quot;)]}'
{&quot;name&quot;:&quot;tcp&quot;,&quot;nodePort&quot;:30006,&quot;port&quot;:31400,&quot;protocol&quot;:&quot;TCP&quot;,&quot;targetPort&quot;:31400}


# 게이트웨이 생성
cat ch4/gateway-tcp.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: echo-tcp-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 31400
      name: tcp
      protocol: TCP
    hosts:
    - &quot;*&quot;
    
kubectl apply -f ch4/gateway-tcp.yaml -n istioinaction

kubectl get gw -n istioinaction

NAME                AGE
coolstore-gateway   44h
echo-tcp-gateway    87s

# 에코 서비스로 라우팅하기 위해 VirtualService 리소스 생성
cat ch4/echo-vs.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: tcp-echo-vs-from-gw
spec:
  hosts:
  - &quot;*&quot;
  gateways:
  - echo-tcp-gateway
  tcp:
  - match:
    - port: 31400
    route:
    - destination:
        host: tcp-echo-service
        port:
          number: 2701

#
kubectl apply -f ch4/echo-vs.yaml -n istioinaction
kubectl get vs -n istioinaction

NAME                  GATEWAYS                HOSTS                          AGE
catalog-vs-from-gw    [&quot;coolstore-gateway&quot;]   [&quot;catalog.istioinaction.io&quot;]   43h
tcp-echo-vs-from-gw   [&quot;echo-tcp-gateway&quot;]    [&quot;*&quot;]                          2s
webapp-vs-from-gw     [&quot;coolstore-gateway&quot;]   [&quot;webapp.istioinaction.io&quot;]    43h


# mac 에 telnet 설치
brew install telnet

#
telnet localhost 30006
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Welcome, you are connected to node myk8s-control-plane.
Running on Pod tcp-echo-deployment-584f6d6d6b-w9wsr.
In namespace istioinaction.
With IP address 10.10.0.17.
Service default.
hello gylee # &amp;lt;- echo request
hello gylee # &amp;lt;- echo response


# telnet 종료하기 : 세션종료 Ctrl + ] &amp;gt; 텔넷 종료 quit
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380a2b07ef23346317c42&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380e5ae5df44e570be512&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.4.2 Traffic routing with SNI passthrough&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt; &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380ebae6ae1d8a2326498&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이번 절에서는 두 기능의 조합. 즉 이스티오 인그레스 게이트웨이에서 트래픽을 종료하지 않고 SNI 호스트네임에 따라 TCP 트래픽을 라우팅하는 방법을 다룬다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380bf9f8bf4ec06cf59ad&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;게이트웨이가 하는 일은 SNI 헤더를 살펴보고 트래픽을 특정 백엔드로 라우팅하는 것 뿐이다. TLS 커넥션 종료는 그 후 백엔드에서 처리한다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380139d41f0f0b4afde6a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;커넥션은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;게이트웨이를&lt;/span&gt; &amp;lsquo;통과 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;passthrough&lt;/span&gt;&lt;/span&gt;&amp;rsquo; 하고,&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 처리&lt;/span&gt;는 게이트웨이가 아닌 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;실제 서비스&lt;/span&gt;가&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 담당&lt;/span&gt;하게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380c0b63cf5b4ea1c3003&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380a0a222e8dca44bd440&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 방식은 서비스 메시에 참여할 수 있는 애플리케이션의 범위를 휠씬 넓혀준다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380e7a017d6101f215b42&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;데이터베이스, 메시지 큐, 캐시 등과 같은 TLS 상의 TCP 서비스는 물론, HTTPS/TLS 트래픽을 직접 처리하고 종료할 것이라고 예상되는 레거시 애플리케이션까지도 포함될 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c23809e9ebdebd2c73b6209&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Gateway 살펴보자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c238095a6bdeda3a9d2d669&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;less&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: sni-passthrough-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 31400 #1 HTTP 포트가 아닌 특정 포트 열기
      name: tcp-sni
      protocol: TLS
    hosts:
    - &quot;simple-sni-1.istioinaction.io&quot; #2 이 호스트를 포트와 연결
    tls:
      mode: PASSTHROUGH #3 통과 트래픽으로 처리&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380879861eaa0814dba4e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c238024b298c54fe34b5082&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예제 애플리케이션에서 TLS를 종료하도록 설정한다. 즉, 인그레스 게이트웨이는 커넥션에 아무것도 하지 않아도 된다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380328feefe02085faeea&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앞 절에서 했던 것처럼 게이트웨이에 인증서를 설정할 필요가 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c23809ba5f4cb614e92bae4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380ad81beed69c190f1d2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;TLS를 종료하는 예제 에플리케이션을 배포하는 것부터 시작하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380b28f60cb7df8dfda11&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vim&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# TLS 인증을 직접 처리하는 앱 배포. (gw는 route 만 처리, pass through )
cat ch4/sni/simple-tls-service-1.yaml
kubectl apply -f ch4/sni/simple-tls-service-1.yaml -n istioinaction
kubectl get pod -n istioinaction

# 기존 Gateway 명세(echo-tcp-gateway) 제거 : istio-ingressgateway의 동일한 port (31400, TCP)를 사용하므로 제거함
kubectl delete gateway echo-tcp-gateway -n istioinaction

# 신규 Gateway 설정
kubectl apply -f ch4/sni/passthrough-sni-gateway.yaml -n istioinaction
kubectl get gw -n istioinaction
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c23802abd03cc195e17d619&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c23807b98b3fda5810dc000&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;VirtualService 리소스 라우팅 규칙 지정하자&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380118b61dd33002a0203&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: simple-sni-1-vs
spec:
  hosts:
  - &quot;simple-sni-1.istioinaction.io&quot;
  gateways:
  - sni-passthrough-gateway
  tls: 
  - match: #1 특정 포트와 호스트의 비교 부분
    - port: 31400
      sniHosts:
      - simple-sni-1.istioinaction.io
    route:
    - destination: #2 트래픽이 일치하는 경우 라우팅 목적지
        host: simple-tls-service-1
        port:
          number: 80 #3 서비스 포트로 라우팅&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380a69c19cb0915220487&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vim&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 
kubectl apply -f ch4/sni/passthrough-sni-vs-1.yaml -n istioinaction
kubectl get vs -n istioinaction


# 호출테스트1
echo &quot;127.0.0.1       simple-sni-1.istioinaction.io&quot; | sudo tee -a /etc/hosts

curl https://simple-sni-1.istioinaction.io:30006/ \
 --cacert ch4/sni/simple-sni-1/2_intermediate/certs/ca-chain.cert.pem
 &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380708dbbe3c484d64987&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;curl 호출은 이스티오 인그레스 게이트웨이로 갔다가, 종료 없이 예제 서비스 simple-tls-service-1 에 도달한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c23801d907dd823be8510fb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c23802abc5bf5bdf65aaf15&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;라우팅을 더 명확하게 하기 위해 인증서가 다르고 SNI 호스트에 기반해 라우팅을 하는 두 번째 서비스를 배포해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380f78ecdd6a9796f284b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vim&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 두 번째 서비스 배포
cat ch4/sni/simple-tls-service-2.yaml
kubectl apply -f ch4/sni/simple-tls-service-2.yaml -n istioinaction

# gateway 설정 업데이트
cat ch4/sni/passthrough-sni-gateway-both.yaml

# host를 기준으로 routing 한다
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: sni-passthrough-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 31400
      name: tcp-sni-1
      protocol: TLS
    hosts:
    - &quot;simple-sni-1.istioinaction.io&quot;
    tls:
      mode: PASSTHROUGH
  - port:
      number: 31400
      name: tcp-sni-2
      protocol: TLS
    hosts:
    - &quot;simple-sni-2.istioinaction.io&quot;
    tls:
      mode: PASSTHROUGH  

kubectl apply -f ch4/sni/passthrough-sni-gateway-both.yaml -n istioinaction

# VirtualService 설정
cat ch4/sni/passthrough-sni-vs-2.yaml

# TLS Extension의 SNI가 simple-sni-2.istioinaction.io인것을 확인하고 simple-tls-service-2 svc로 routing
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: simple-sni-2-vs
spec:
  hosts:
  - &quot;simple-sni-2.istioinaction.io&quot;
  gateways:
  - sni-passthrough-gateway
  tls:
  - match:
    - port: 31400
      sniHosts:
      - simple-sni-2.istioinaction.io
    route:
    - destination:
        host: simple-tls-service-2
        port:
          number: 80

kubectl apply -f ch4/sni/passthrough-sni-vs-2.yaml -n istioinaction

# 호출테스트2
echo &quot;127.0.0.1       simple-sni-2.istioinaction.io&quot; | sudo tee -a /etc/hosts

curl https://simple-sni-2.istioinaction.io:30006 \
--cacert ch4/sni/simple-sni-2/2_intermediate/certs/ca-chain.cert.pem

{
  &quot;name&quot;: &quot;simple-tls-service-2&quot;,
  &quot;uri&quot;: &quot;/&quot;,
  &quot;type&quot;: &quot;HTTP&quot;,
  &quot;ip_addresses&quot;: [
    &quot;10.10.0.16&quot;
  ],
  &quot;start_time&quot;: &quot;2025-04-18T12:19:04.851719&quot;,
  &quot;end_time&quot;: &quot;2025-04-18T12:19:04.858520&quot;,
  &quot;duration&quot;: &quot;6.8ms&quot;,
  &quot;body&quot;: &quot;Hello from simple-tls-service-2!!!&quot;, # SNI에 맞게 simple-tls-service-2에서 response가 온것을 볼 수 있다.
  &quot;code&quot;: 200
}

# simple-tls-service-2 pod의 ip 확인
kubectl get po -n istioinaction -o wide
NAME                                   READY   STATUS    RESTARTS   AGE     IP           NODE                  NOMINATED NODE   READINESS GATES
simple-tls-service-1-ffcc5bfd-8t6kz    2/2     Running   0          6m13s   10.10.0.15   myk8s-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;
simple-tls-service-2-b84548475-cp75x   2/2     Running   0          3m53s   10.10.0.16   myk8s-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380849795d3e8403f9039&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 요청을 simple-tls-sni-2 서비스가 서빙했음을 body 필드의 응답이 어떻게 알려주는지 주목하자.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c23800d9fcae532715a7af0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380da9825e0a95fce45cf&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c238066abcadd2d8b5bcd08&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380d48716c72939fe5907&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.5 Operational tips&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;운영 팁&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1d9b8b2c1c238008afcce2883a258e4a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;실습 참고&lt;/code&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://netpple.github.io/docs/istio-in-action/Istio-ch4-4-tips&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://netpple.github.io/docs/istio-in-action/Istio-ch4-4-tips&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d9b8b2c1c23805988f9eba3f8afd642&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.5.1 Split gateway responsibilities&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;게이트웨이 책임 나누기 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c23800a8572c9a257a28610&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인그레스 게이트웨이를 여럿(다른 진입점) 둘 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380caa0ccfc012c221ed5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다른 진입점을 배포해 트래픽을 나누고 다양한 서비스 간 트래픽 경로를 격리하고 싶을 수도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c23805eb30fd44caa9afd0d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어떤 서비스는 성능에 더 민감하거나, 고가용성이 더 필요하거나, 컴플라이언스를 이유로 격리돼야 할 수도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380a3853af328e6e879c7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어떤 떄는 다른 팀에 영향을 주지 않도록 각 팀이 각자의 게이트웨이 및 설정을 소유하게 하고 싶을 수도 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380519732f781f420cfdd&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c23803b8bbedf829ad5948a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;633&quot; data-origin-height=&quot;407&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cf9TFP/btsNspxWgoG/0xOXfhtzc7nE2IFyNlJvk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cf9TFP/btsNspxWgoG/0xOXfhtzc7nE2IFyNlJvk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cf9TFP/btsNspxWgoG/0xOXfhtzc7nE2IFyNlJvk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcf9TFP%2FbtsNspxWgoG%2F0xOXfhtzc7nE2IFyNlJvk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;633&quot; height=&quot;407&quot; data-origin-width=&quot;633&quot; data-origin-height=&quot;407&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ehhfU2/btsNr4GSlGE/AIwocdZC1KbzrsL1E4iR5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ehhfU2/btsNr4GSlGE/AIwocdZC1KbzrsL1E4iR5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ehhfU2/btsNr4GSlGE/AIwocdZC1KbzrsL1E4iR5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FehhfU2%2FbtsNr4GSlGE%2FAIwocdZC1KbzrsL1E4iR5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;791&quot; height=&quot;406&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;406&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;div id=&quot;block-1d9b8b2c1c23808c96e4faae8d71397e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380509849f5e870e4aa86&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;새 커스텀 게이트웨이 정의 예시&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380108492e189119729c4&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: my-user-gateway-install
  namespace: istioinaction
spec:
  profile: empty
  values:
    gateways:
      istio-ingressgateway:
        autoscaleEnabled: false
  components:
    ingressGateways:
    - name: istio-ingressgateway
      enabled: false    
    - name: my-user-gateway
      namespace: istioinaction
      enabled: true
      label:
        istio: my-user-gateway
      k8s:
        service:
          ports:
            - name: tcp  # my-user-gateway 에서 사용할 포트 설정
              port: 30007
              targetPort: 31400&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380df8fdaf17ce15f5936&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
docker exec -it myk8s-control-plane bash
------------------------------------------
# istioinaction 네임스페이스에 Ingress gateway 설치
cat &amp;lt;&amp;lt;EOF &amp;gt; my-user-gateway-edited.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: my-user-gateway-install
  namespace: istioinaction
spec:
  profile: empty
  values:
    gateways:
      istio-ingressgateway:
        autoscaleEnabled: false
  components:
    ingressGateways:
    - name: istio-ingressgateway
      enabled: false    
    - name: my-user-gateway
      namespace: istioinaction
      enabled: true
      label:
        istio: my-user-gateway
      k8s:
        service:
          ports:
            - name: tcp  # my-user-gateway 에서 사용할 포트 설정
              port: 31400
              targetPort: 31400
              nodePort: 30007 # 외부 접속을 위해 NodePort Number 직접 설정
EOF

# istioctl manifest generate -n istioinaction -f my-user-gateway-edited.yaml
istioctl install -y -n istioinaction -f my-user-gateway-edited.yaml

exit
------------------------------------------

# IstioOperator 확인
# 새롭게 istioOpertor가 설치 되었다. -&amp;gt; 즉, 새로운 ingressgateway가 하나 생성되었다.(service, pod)
kubectl get IstioOperator -A
NAMESPACE       NAME                                      REVISION   STATUS   AGE
istio-system    installed-state                                               29m
istioinaction   installed-state-my-user-gateway-install                       10s

# istio-system에 있는 default ingressgateway가 아닌 새로운 ingressgateway가 생성됨!
kubectl get deploy my-user-gateway -n istioinaction
NAME              READY   UP-TO-DATE   AVAILABLE   AGE
my-user-gateway   1/1     1            1           58s

# 포트 확인
# 기존 istio-system ns에 있는 default ingressgatway svc nodeport로 30000(http), 30005(https), 30006(tcp)사용 중이었다.
# 새로운 ingressgateway svc는 아래와 같이 30007 Nodeport만 사용
kubectl get svc my-user-gateway -n istioinaction -o yaml
...
  - name: tcp
    nodePort: 30007
    port: 31400
    protocol: TCP
    targetPort: 31400
...
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380ca8094d12c79646a48&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380f7b20ce952347f1d4c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습 : my-user-gateway를 경유하여 TCP 통신을 해봅시다&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c23808092f6f79cbd1fe1c4&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;properties&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 이제 default gateway가 아닌 새로운 insgressgateway를 사용하는 gateway를 만들어보자!
# Gateway
cat &amp;lt;&amp;lt;EOF | kubectl apply -n istioinaction -f -
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: echo-tcp-gateway
spec:
  selector:
    istio: my-user-gateway  #  New gateway
  servers:
  - port:
      number: 31400
      name: tcp-echo
      protocol: TCP
    hosts:
    - &quot;*&quot;
EOF

# VirtualService 명세
# TCP 통신용 vs(위에서 echo server test한 vs임)
cat ch4/echo-vs.yaml
kubectl apply -f ch4/echo-vs.yaml -n istioinaction

# 앱 배포
cat ch4/echo.yaml
kubectl apply -f ch4/echo.yaml -n istioinaction

# 호출 테스트 : NodePort 30007로 접속 테스트
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Welcome, you are connected to node myk8s-control-plane.
Running on Pod tcp-echo-deployment-584f6d6d6b-jlmhz.
In namespace istioinaction.
With IP address 10.10.0.18.
Service default.
gylee test  # &amp;lt;-- echo request
gylee test. # &amp;lt;-- echo response

# telnet 종료하기 : 세션종료 Ctrl + ] &amp;gt; 텔넷 종료 quit&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c23807bbcb1f19a34299b84&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380aa9461e23d35e779a3&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.5.2 Gateway injection&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;게이트웨이 주입 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380f5a3b9f5d506666cf4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사용자에게 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;IstioOperator&lt;/span&gt; 리소스(기존 이스티오 설치를 변경할 수 있는)에 대한 전체 접근 권한을 부여하지 않고도 자체 게이트웨이를 만들 수 있게 허용하는 방법은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;게이트웨이 주입&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;gateway injection&lt;/span&gt; 을 사용하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c238051b8a7d5fb50d2c7ae&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;게이트웨이 주입을 사용하며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;미완성&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;subbed-out&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;게이트웨이 디플로이먼트를 배포&lt;/span&gt;하고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오가 나머지를 채우&lt;/span&gt;는 방식이 된다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380ef8343e7781da850f2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사이드카 주입이 이뤄지는 방식과 비슷하다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c23806ca580e68e0a705ae3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 방식으로, 팀에서 미완성 게이트웨이 Deployment 리소스를 주고 이스티오가 나머지를 자동 설정하게 할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380a5822ff997ca866cff&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;less&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-user-gateway-injected
  namespace: istioinaction
spec:
  selector:
    matchLabels:
      ingress: my-user-gateway-injected
  template:
    metadata:
      annotations:
        sidecar.istio.io/inject: &quot;true&quot; #1 주입 활성화
        inject.istio.io/templates: gateway #2 gateweay 템플릿  
      labels:
        ingress: my-user-gateway-injected
    spec:
      containers:
      - name: istio-proxy #3 반드시 이 이름이어야 한다
        image: auto #4 미완성 이미지
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380128a2ef9156f8ac9ed&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
cat ch4/my-user-gw-injection.yaml
kubectl apply -f ch4/my-user-gw-injection.yaml

#
kubectl get deploy,svc,ep my-user-gateway-injected -n istioinaction

# 새롭게 istiod에 의해 injected된 ingressgateway deployment
NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/my-user-gateway-injected   1/1     1            1           3s

# istiod에 의해 injected된 ingressgateway의 LB typ service. 
# 32577(http), 31258(https) nodePort를 노출 중이다.
NAME                               TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)                      AGE
service/my-user-gateway-injected   LoadBalancer   10.200.1.5   &amp;lt;pending&amp;gt;     80:32577/TCP,443:31258/TCP   3s

NAME                                 ENDPOINTS                      AGE
endpoints/my-user-gateway-injected   10.10.0.19:443,10.10.0.19:80   3s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380ab94d6c1f9d5e4afe4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380c89e85ddf63c6d161e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.5.3 Ingress gateway access logs&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;인그레스 게이트웨이 액세스 로그 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(실습)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c238018827ad8e8dae7bc35&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시에서 일반적인 기능은 처리하는 모든 요청을 기록하는 것이다. 이 액세스 로그는 문제 해결에 유용한다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c23809283e1f893db285913&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 프록시(엔보이)도 액세스 로그를 만들 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c23803f8e41d4f13d28545f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데모 설치 프로필&lt;/span&gt;에서는 인그레스 게이트웨이와 서비스 프록시가 액세스 로그를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;표준 출력 스트림&lt;/span&gt;에 출력하도록 설정된다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380edadc9dd113f3df624&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;액세스 로그를 보려면 컨테이너 로그를 출력하기만 하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380ff8977e6b3634e304f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
kubectl logs -f deploy/istio-ingressgateway -n istio-system
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380989bb8c32c4de4faf6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380ae95b1cbac0e7119c4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;위 명령은 인그레스 게이트웨이의 액세스 로그를 출력한다. 따라서 앞선 예제들에서 만들어낸 트래픽들의 기록을 볼 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380cb823cf202759d1640&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본 프로필&lt;/span&gt;을 사용한 운영 환경 이스티오에서는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;액세스 로깅이 비활성화&lt;/span&gt;돼 있다는 사실을 알면 놀랄 수도 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380a2877bc852a2319801&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 반복 호출
watch -d -n 1 curl -s -v https://webapp.istioinaction.io:30005/api/catalog --cacert ch4/certs/2_intermediate/certs/ca-chain.cert.pem

# 애플리케이션 컨테이너는 실시간 로그 출력
kubectl stern -n istioinaction -l app=webapp -c webapp
webapp-7685bcb84-5r5fz webapp 2025/04/18 12:48:54.122 [M] [router.go:1014]  192.168.65.1 - - [18/Apr/2025 12:48:54] &quot;GET /api/catalog HTTP/1.1 200 0&quot; 0.005034  curl/8.7.1
webapp-7685bcb84-5r5fz webapp 
...

# 초기 부팅 로그 출력 및 xDS 설정 관련 log 출력
kubectl stern -n istioinaction -l app=webapp -c istio-proxy
+ webapp-7685bcb84-5r5fz &amp;rsaquo; istio-proxy
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174512Z  info    FLAG: --concurrency=&quot;2&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174524Z  info    FLAG: --domain=&quot;istioinaction.svc.cluster.local&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174526Z  info    FLAG: --help=&quot;false&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174527Z  info    FLAG: --log_as_json=&quot;false&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174528Z  info    FLAG: --log_caller=&quot;&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174529Z  info    FLAG: --log_output_level=&quot;default:info&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174529Z  info    FLAG: --log_rotate=&quot;&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174530Z  info    FLAG: --log_rotate_max_age=&quot;30&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174531Z  info    FLAG: --log_rotate_max_backups=&quot;1000&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174531Z  info    FLAG: --log_rotate_max_size=&quot;104857600&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174532Z  info    FLAG: --log_stacktrace_level=&quot;default:none&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174534Z  info    FLAG: --log_target=&quot;[stdout]&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174535Z  info    FLAG: --meshConfig=&quot;./etc/istio/config/mesh&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174535Z  info    FLAG: --outlierLogPath=&quot;&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174536Z  info    FLAG: --proxyComponentLogLevel=&quot;misc:error&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174537Z  info    FLAG: --proxyLogLevel=&quot;warning&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174537Z  info    FLAG: --serviceCluster=&quot;istio-proxy&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174538Z  info    FLAG: --stsPort=&quot;0&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174539Z  info    FLAG: --templateFile=&quot;&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174540Z  info    FLAG: --tokenManagerPlugin=&quot;GoogleTokenExchange&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174541Z  info    FLAG: --vklog=&quot;0&quot;
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.174542Z  info    Version 1.17.8-a781f9ee6c511d8f22140d8990c31e577b2a9676-Clean
...
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.184219Z  info    Envoy command: [-c etc/istio/proxy/envoy-rev.json --drain-time-s 45 --drain-strategy immediate --local-address-ip-version v4 --file-flush-interval-msec 1000 --disable-hot-restart --allow-unknown-static-fields --log-format %Y-%m-%dT%T.%fZ      %l      envoy %n %g:%#  %v      thread=%t -l warning --component-log-level misc:error --concurrency 2]
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.209704Z  info    xdsproxy        connected to upstream XDS server: istiod.istio-system.svc:15012
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.216181Z  info    ads     ADS: new connection for node:webapp-7685bcb84-5r5fz.istioinaction-1
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.216277Z  info    ads     ADS: new connection for node:webapp-7685bcb84-5r5fz.istioinaction-2
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.220656Z  info    cache   generated new workload certificate      latency=37.15875ms ttl=23h59m59.779348578s
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.220670Z  info    cache   Root cert has changed, start rotating root cert
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.220677Z  info    ads     XDS: Incremental Pushing:0 ConnectedEndpoints:2 Version:
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.220690Z  info    cache   returned workload trust anchor from cache       ttl=23h59m59.779310328s
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.220702Z  info    cache   returned workload certificate from cache        ttl=23h59m59.779298078s
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.221062Z  info    cache   returned workload trust anchor from cache       ttl=23h59m59.778940578s
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.221357Z  info    ads     SDS: PUSH request for node:webapp-7685bcb84-5r5fz.istioinaction resources:1 size:4.0kB resource:default
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.221720Z  info    ads     SDS: PUSH request for node:webapp-7685bcb84-5r5fz.istioinaction resources:1 size:1.1kB resource:ROOTCA
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:37.221741Z  info    cache   returned workload trust anchor from cache       ttl=23h59m59.778260328s
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:38.697239Z  info    Readiness succeeded in 1.526902959s
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:00:38.697686Z  info    Envoy proxy is ready
webapp-7685bcb84-5r5fz istio-proxy 2025-04-18T12:31:05.611163Z  info    xdsproxy        connected to upstream XDS server: istiod.istio-system.svc:15012
...


#&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c238047a943c7ec49826a72&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380a2975cca690f857230&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380e79879d7049ae25d65&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 표준 출력 스트림으로 출력하도록 accessLogFile 속성을 변경해 이를 변경할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380f78117e8481e5422b5&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
kubectl get cm -n istio-system istio -o yaml
data:
  mesh: |-
    defaultConfig:
      discoveryAddress: istiod.istio-system.svc:15012
      proxyMetadata: {}
      tracing:
        zipkin:
          address: zipkin.istio-system:9411
    enablePrometheusMerge: true
    rootNamespace: istio-system
    trustDomain: cluster.local
  meshNetworks: 'networks: {}'
..

#
docker exec -it myk8s-control-plane bash
------------------------------------------
# 표준 출력 스트림으로 출력하도록 accessLogFile 속성을 변경
istioctl install --set meshConfig.accessLogFile=/dev/stdout
y 입력

exit
------------------------------------------

# configmap 에 mesh 바로 아래에 accessLogFile 부분 추가됨
# application에서 /dev/stdout에 찍히는 log를 istio-proxy container에서 확인 할 수 있도록 설정!!
# 예를들어 nginx app의 경우 보통 access log가 /dev/stdout으로 찍히도록 설정되어 console output으로 log가 찍혀 kubectl logs 혹은 kubectl stern으로 확인 할 수 있는것임!
kubectl get cm -n istio-system istio -o yaml
...
  mesh: |-
    accessLogFile: /dev/stdout
...

# istio-proxy container에서 application의 /dev/stdout로그를 확인 할 수 있음
# 즉, # 애플리케이션 호출에 대한 로그도 출력됨!
kubectl stern -n istioinaction -l app=webapp -c istio-proxy
webapp-7685bcb84-5r5fz istio-proxy [2025-04-18T12:53:07.365Z] &quot;GET /items HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 502 3 2 &quot;192.168.65.1&quot; &quot;beegoServer&quot; &quot;dbe3a986-65ba-486a-9f4e-ed84c247478b&quot; &quot;catalog.istioinaction:80&quot; &quot;10.10.0.13:3000&quot; outbound|80||catalog.istioinaction.svc.cluster.local 10.10.0.14:45138 10.200.1.98:80 192.168.65.1:0 - default
webapp-7685bcb84-5r5fz istio-proxy [2025-04-18T12:53:07.363Z] &quot;GET /api/catalog HTTP/1.1&quot; 200 - via_upstream - &quot;-&quot; 0 357 5 5 &quot;192.168.65.1&quot; &quot;curl/8.7.1&quot; &quot;dbe3a986-65ba-486a-9f4e-ed84c247478b&quot; &quot;webapp.istioinaction.io:30005&quot; &quot;10.10.0.14:8080&quot; inbound|8080|| 127.0.0.6:54943 10.10.0.14:8080 192.168.65.1:0 outbound_.80_._.webapp.istioinaction.svc.cluster.local default
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380dabdd8e7386ffa4b77&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c238047b396fcf2050ef626&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;액세스 로그는 기본적으로 꺼져 있는데, 운영 환경 클러스터에서 수백 또는 수천 개의 워크로드가 있고 각 워크로드가 많은 트래픽을 처리한다는 점을 고려하면 합리적이다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c23806988b7efc6bc7b0174&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 각 요청은 한 서비스에서 다른 서비스로 여러 홉을 이동하기 때문에 생성되는 액세스 로그량은 어떤 로깅 시스템에든 부담을 줄 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c238076ba1adca1c57fec3c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;더 나은 접근 방식은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;관심 있는 워크로드에 대해서만 액세스 로그를 켜는 것&lt;/u&gt;&lt;/span&gt;이며, 이는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;텔레메트리 API&lt;/span&gt;를 사용해 가능하다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380299c85f83ce89353bd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 인그레스 게이트웨이 워크로드의 액세스 로그만 표시하려면 다음과 같은 텔레메트리 설정을 사용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c23805cbaf8e81c10e94557&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
  name: ingress-gateway
  namespace: istio-system
spec:
  selector:
    matchLabels:
      app: istio-ingressgateway #1 레이블과 일치하는 파드는 텔레메트리 설정을 가져온다
  accessLogging:
  - providers:
    - name: envoy #2 액세스 로그를 위한 프로바이더 설정
    disabled: false #3 disable 를 false 로 설정해 활성화한다&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380ceb28ce787b00bff1c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380429a40fbfc618e32e3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;토스 사례 : istio-proxy 에서 gRPC로 직접 Acess log collector 로 수집(Go로 직접 개발) &amp;rarr; Kafka &amp;rarr; Logstash &amp;rarr; ES&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7q5jC/btsNsdkt3aS/ur98FZv6DjyWxKYhik9FJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7q5jC/btsNsdkt3aS/ur98FZv6DjyWxKYhik9FJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7q5jC/btsNsdkt3aS/ur98FZv6DjyWxKYhik9FJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7q5jC%2FbtsNsdkt3aS%2Fur98FZv6DjyWxKYhik9FJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;760&quot; height=&quot;460&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380f2831df46df5d2421e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c238049a124cbbed89fb478&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.5.4 Reducing gateway configuration&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;게이트웨이 설정 줄이기&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380e9b835db0deacc3e10&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본적으로, 이스티오는 모든 프록시가 메시 내의 모든 서비스를 알도록 구성한다. 메시에 서비스가 많다면 데이터 플레인 프록시의 설정이 매우 커질 수 있다. 그리고 설정이 크면 리소스 증폭, 성능 문제, 확장성 문제로 이어질 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380a48edce5e39052fd68&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 문제를 해결하기 위해 데이터 플레인과 컨트롤 플레인 모두에게 설정을 최적화할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380db923dd8d70c2bc159&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Sidecar 리소스&lt;/span&gt;를 사용해 이 설정을 줄이는 방법은 11장에서 자세히 다룬다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oLNRe/btsNoqkxZGo/mPr8pDHJzacYD6nNRj3d41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oLNRe/btsNoqkxZGo/mPr8pDHJzacYD6nNRj3d41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oLNRe/btsNoqkxZGo/mPr8pDHJzacYD6nNRj3d41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoLNRe%2FbtsNoqkxZGo%2FmPr8pDHJzacYD6nNRj3d41%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;890&quot; height=&quot;425&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;div id=&quot;block-1d9b8b2c1c23807a9283fbd7693690b8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380f3938cca21e75ea543&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 Sidecar 리소스는 게이트웨이에는 적용되지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380caaec2cf6bd8eb14f5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;새 게이트웨이(인그레스 게이트웨이 등)를 배포하면 프록시에는 메시 내 라우팅할 수 있는 모든 서비스가 설정된다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c23801ab485cebef0ab97a4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;상술했듯이, 이렇게 하면 설정이 아주 커져 게이트웨이에 부담이 될 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c23803e9a0bced1eea0285f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c23807887a4e56636f59a30&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요령은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프록시에서 필요 이상의 설정은 제거하고 게이트웨이 관련 설정만 포함되도록 하는 것&lt;/span&gt;이다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c238007927eec2474d442e0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;최근까지 이 기능은 기본적으로 꺼져 있었는데, 최신 버전에서는 활성화 여부를 확인 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380a7b3b6d582fc44df8a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어느 버전이든 다음 설정으로 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;게이트웨이의 설정 잘라내기&lt;/span&gt;&lt;/span&gt;를 명시적으로 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;활성화&lt;/span&gt;&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c238036b258e6690264f8ce&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;less&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: control-plane
spec:
  profile: minimal
  components:
    pilot:
      k8s:
        env:
        - name: PILOT_FILTER_GATEWAY_CLUSTER_CONFIG
          value: &quot;true&quot;
  meshConfig:
    defaultConfig:
      proxyMetadata:
        ISTIO_META_DNS_CAPTURE: &quot;true&quot;
    enablePrometheusMerge: true&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380b4aeccc81dd72da846&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/my-user-gateway.istioinaction
SERVICE FQDN                                                 PORT      SUBSET     DIRECTION     TYPE           DESTINATION RULE
BlackHoleCluster                                             -         -          -             STATIC
agent                                                        -         -          -             STATIC
catalog.istioinaction.svc.cluster.local                      80        -          outbound      EDS
...

# 현재 37개 cluster 정보
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/my-user-gateway.istioinaction | wc -l
      37
      
# 아래 추가
KUBE_EDITOR=&quot;nano&quot;  kubectl edit IstioOperator -n istioinaction installed-state-my-user-gateway-install
...
    pilot:
      enabled: false
      k8s:
        env:
        - name: PILOT_FILTER_GATEWAY_CLUSTER_CONFIG
          value: &quot;true&quot;
...

# 동일... 해당 gw pod 삭제 후 재시작 되어도 동일.. 다른 설정 방법이 있나?... kubectl edit 대신 IstioOperator 로 설정해야할지도..
docker exec -it myk8s-control-plane istioctl proxy-config cluster deploy/my-user-gateway.istioinaction | wc -l
      37

# IstioOperator 설정
cat &amp;lt;&amp;lt;EOF &amp;gt; my-user-gateway-edited.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: my-user-gateway-install
  namespace: istioinaction
spec:
  profile: empty
  values:
    gateways:
      istio-ingressgateway:
        autoscaleEnabled: false
  components:
    pilot:
      enabled: false
      k8s:
        env:
        - name: PILOT_FILTER_GATEWAY_CLUSTER_CONFIG
          value: &quot;true&quot;
    ingressGateways:
    - name: istio-ingressgateway
      enabled: false    
    - name: my-user-gateway
      namespace: istioinaction
      enabled: true
      label:
        istio: my-user-gateway
      k8s:
        service:
          ports:
            - name: tcp  # my-user-gateway 에서 사용할 포트 설정
              port: 31400
              targetPort: 31400
              nodePort: 30007 # 외부 접속을 위해 NodePort Number 직접 설정
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380d7956eed78d3120427&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c23801fa3f2f887e3e3a525&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 설정의 핵심은 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PILOT_FILTER_GATEWAY_CLUSTER_CONFIG &lt;/span&gt;&lt;/span&gt;기능 플래그이다. - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/reference/commands/pilot-agent/#envvars&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c23805d991fc24bb108afa9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;i&gt;If enabled, Pilot will send only clusters that referenced in gateway virtual services attached to gateway&lt;/i&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c23808795a2d182f1c67374&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;pilot은 istioComponentSetSpec의 설정이다 &amp;rarr; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/reference/config/istio.operator.v1alpha1/#IstioComponentSetSpec&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://istio.io/latest/docs/reference/config/istio.operator.v1alpha1/#IstioComponentSetSpec&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d9b8b2c1c238092a5cfd5b8ba6a9d12&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 플래그는 게이트웨이 프록시 설정 내에 있는 클러스터를 해당 게이트웨이에 적용한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VirtualService 에서 실제로 참조하는 클러스터로만 좁힌다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380c0b825f3f2727685b4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d9b8b2c1c2380fba9fdd412104e8a96&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4.5.4. Summary&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380f8bc70e6ea81ddc1b0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인그레스 게이트웨이&lt;/span&gt;는 서비스 메시에 들어오는 트래픽을 세밀하게 제어합니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380c48ddee429b7e31e20&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Ingress gateways provide fine-grained control over what traffic enters our service mesh.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d9b8b2c1c238051b8fdf13d4dd35694&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;게이트웨이 리소스를 사용하면 메시 내로 허용하는 트래픽 종류를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;호스트별로 설정&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380e0ac59d2c7d44779c7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Using the Gateway resource, we can configure the type of traffic admitted into the mesh for a specific host.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d9b8b2c1c238032874cefd655366085&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메시 내의 다른 서비스와 마찬가지로,&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 트래픽을 라우팅&lt;/span&gt;하기 위해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;VirtualService&lt;/span&gt; 리소스를 사용합니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c23807db16ad75b72d5e539&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Just as with any service in the mesh, it uses VirtualService resources to route the traffic.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d9b8b2c1c238052ae39ea75a651b26a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;TLS 모드&lt;/span&gt;는 호스트마다 다음 모드 중 하나로 구성할 수 있습니다. TLS mode is configurable per host with one of the following modes:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c2380f3981ffcd5c0b8faf2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Encrypt and prevent man-in-the-middle attacks with the &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SIMPLE&lt;/span&gt; TLS mode.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c23808f9a00effa42589130&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Mutually authenticate both server and client with the &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;MUTUAL&lt;/span&gt; TLS mode.&lt;/li&gt;
&lt;li id=&quot;block-1d9b8b2c1c23800da134e30e636a9bff&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Admit and reverse proxy encrypted traffic using the &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SNI&lt;/span&gt; header with the &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PASSTHROUGH&lt;/span&gt; TLS mode.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d9b8b2c1c23807a93c2fae70a8cde20&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;현재 지원되지 않는 L7 프로토콜의 경우 Istio에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;순수 TCP 트래픽이 지원&lt;/span&gt;됩니다. 그러나 재시도, 복잡한 라우팅 등 일반 TCP에서는 많은 기능을 사용할 수 없습니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c23803a9196d7114dbbddf1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Plain TCP traffic is supported in Istio for L7 protocols that are currently not supported. However, many features are not possible with plain TCP, such as retries, complex routing, and so on.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d9b8b2c1c23806484c2d3c99816124e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;게이트웨이 주입을 사용하여 팀이 자체 게이트웨이를 관리할 수 있도록 할 수 있습니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d9b8b2c1c23806e959eed5595b4a0f1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;We can enable teams to manage their own gateways by using gateway injection.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Kubernetes</category>
      <author>ManMan</author>
      <guid isPermaLink="true">https://gylee815.tistory.com/29</guid>
      <comments>https://gylee815.tistory.com/29#entry29comment</comments>
      <pubDate>Sat, 19 Apr 2025 13:00:29 +0900</pubDate>
    </item>
    <item>
      <title>[AEWS 3기] 10주차 - K8S 시크릿 관리</title>
      <link>https://gylee815.tistory.com/27</link>
      <description>&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;0&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;0&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238009946bc318a9c4932b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습환경 - Kind k8s cluster &amp;amp; Jenkins &amp;amp; ArgoCD&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1d3b8b2c1c23804da9ebe1905438764c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;0.1. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kind 로 k8s 배포&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;macOS&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; 사용자 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rarr; 필수&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;0&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;0&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23807fb724dfe41e2d8bec&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본 정보 확인&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d3b8b2c1c23807f9baaedcbbd3bc7a3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 클러스터 배포 전 확인
docker ps

# Create a cluster with kind
MyIP=&amp;lt;각자 자신의 PC IP&amp;gt;
MyIP=192.168.254.127

# cicd-labs 디렉터리에서 아래 파일 작성
cat &amp;gt; kind-3node.yaml &amp;lt;&amp;lt;EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  apiServerAddress: &quot;127.0.0.1&quot; # $MyIP로 설정하셔도 됩니다.
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000
    hostPort: 30000
  - containerPort: 30001
    hostPort: 30001
  - containerPort: 30002
    hostPort: 30002
  - containerPort: 30003
    hostPort: 30003
  - containerPort: 30004
    hostPort: 30004
  - containerPort: 30005
    hostPort: 30005
  - containerPort: 30006
    hostPort: 30006
- role: worker
- role: worker
EOF

KUBECONFIG=$PWD/kubeconfig

kind create cluster --config kind-3node.yaml --name myk8s --image kindest/node:v1.32.2

# 확인
kind get nodes --name myk8s
kubens default

# kind 는 별도 도커 네트워크 생성 후 사용 : 기본값 172.18.0.0/16
docker network ls
docker inspect kind | jq

# k8s api 주소 확인 : 어떻게 로컬에서 접속이 되는 걸까?
kubectl cluster-info

# 노드 정보 확인 : CRI 는 containerd 사용
kubectl get node -o wide

# 파드 정보 확인 : CNI 는 kindnet 사용
kubectl get pod -A -o wide

# 네임스페이스 확인 &amp;gt;&amp;gt; 도커 컨테이너에서 배운 네임스페이스와 다릅니다!
kubectl get namespaces

# 컨트롤플레인/워커 노드(컨테이너) 확인 : 도커 컨테이너 이름은 myk8s-control-plane , myk8s-worker/worker-2 임을 확인
docker ps
docker images

# 디버그용 내용 출력에 ~/.kube/config 권한 인증 로드
kubectl get pod -v6

# kube config 파일 확인
cat ~/.kube/config&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238079874ad1eae2c39d91&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;0&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;0&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380958f87d95c38586d84&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(참고) 클러스터 삭제&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d3b8b2c1c23807c8154d46d8b2488b1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 클러스터 삭제
kind delete cluster --name myk8s
docker ps
cat ~/.kube/config&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238007ac40ee4c9469120e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380e98dc7ce83173ced6c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;0.2. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨테이터 &lt;/span&gt;(Jenkins) : 호스트 OS 포트 노출(expose)로 접속 및 사용 : &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;macOS&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; 사용자 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rarr; 필수&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;0&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;0&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238027831cc320196019c0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Jenkins 컨테이너 기동&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380adb4cbe900535a36ac&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 작업 디렉토리 생성 후 이동
mkdir cicd-labs
cd cicd-labs

# cicd-labs 작업 디렉토리 IDE(VSCODE 등)로 열어두기
code .

# 
cat &amp;lt;&amp;lt;EOT &amp;gt; docker-compose.yaml
services:

  jenkins:
    container_name: jenkins
    image: jenkins/jenkins
    restart: unless-stopped
    networks:
      - cicd-network
    ports:
      - &quot;8080:8080&quot;
      - &quot;50000:50000&quot;
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - jenkins_home:/var/jenkins_home

volumes:
  jenkins_home:

networks:
  cicd-network:
    driver: bridge
EOT


# 배포
docker compose up -d
docker compose ps

# 기본 정보 확인
for i in jenkins ; do echo &quot;&amp;gt;&amp;gt; container : $i &amp;lt;&amp;lt;&quot;; docker compose exec $i sh -c &quot;whoami &amp;amp;&amp;amp; pwd&quot;; echo; done

# 도커를 이용하여 각 컨테이너로 접속
docker compose exec jenkins bash
exit&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23807fb361d22c35faaab3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;0&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;0&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23809f8361c9d2430602f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Jenkins 컨테이너 초기 설정&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380049da9f40e5f41cae3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# Jenkins 초기 암호 확인
docker compose exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
5ecee51cb8694adeb1c77aee0af065df

# Jenkins 웹 접속 주소 확인 : 계정 / 암호 입력 &amp;gt;&amp;gt; admin / qwe123
open &quot;http://127.0.0.1:8080&quot; # macOS
웹 브라우저에서 http://127.0.0.1:8080 접속 # Windows

# (참고) 로그 확인 : 플러그인 설치 과정 확인
docker compose logs jenkins -f

# Jenkins URL
http://192.168.0.10:8080/&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380748f2cfb600b1a984b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;0&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;0&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23800190b6dc6a19d560e9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Jenkins URL 설정 : 각자 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;자신의 PC의 IP&lt;/span&gt;&lt;/code&gt;를 입력&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d3b8b2c1c238091bb12ed63430eb386&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/61655110-0ff6-4727-992c-23c572e6291f/CleanShot_2024-12-01_at_13.50.14/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/61655110-0ff6-4727-992c-23c572e6291f/CleanShot_2024-12-01_at_13.50.14/w=828,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/61655110-0ff6-4727-992c-23c572e6291f/CleanShot_2024-12-01_at_13.50.14/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;768&quot; height=&quot;304.9911504424779&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23804db4c9fb01844a8a3f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380eb95d6ed8f0493f094&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238020b5c5e7d02ddd64b8&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(참고) 실습 완료 후 해당 컨테이너 중지 상태로 둘 경우 &amp;rarr; 재부팅 및 이후에 다시 실습을 위해 컨테이너 시작 시&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380c1a2f9c36b7f3c8bbe&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(참고) 특정 컨테이너만 삭제 후 다시 초기화 상태로 기동 시&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;0&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;0&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380e88661f6181e7ee7c3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(참고) 모든 실습 후 삭제 시 : &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;docker compose down --volumes --remove-orphans&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d3b8b2c1c238076a8d0fea91b7ff9bd&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380b48573c000da256901&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;0.3. ArgoCD 설치&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c238013a7a1e821951130ff&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;0.3.1. ArgoCD 이전 스터디 내용&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380a28a8ce060faee13a7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Argo CD v3.0 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://blog.argoproj.io/argo-cd-v3-0-release-candidate-a0b933f4e58f&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Release&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://blog.argoproj.io/announcing-argo-cd-v3-small-but-mighty-df05c0b39ad6&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Announcing&lt;/a&gt;&lt;i&gt; &amp;rarr; &amp;lsquo;25 3월 23일 현재 ArgoCD Helm Chart 에서 v3.0 미지원 상태&lt;/i&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380a49fb5cd2afd5c24e9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Argo&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://argoproj.github.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;공홈&lt;/a&gt; &amp;amp; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://argoproj.github.io/cd/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;CD&lt;/a&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://argo-cd.readthedocs.io/en/stable/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; &amp;amp; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://argoproj.github.io/rollouts/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Rollouts&lt;/a&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://argoproj.github.io/argo-rollouts/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; &amp;amp; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://blog.argoproj.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d3b8b2c1c238042be10f56cebd06b47&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;악분&lt;/span&gt;님 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ArgoCD&lt;/span&gt; 정리 글&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c238032a7c4d0f65a3f5b18&quot; class=&quot;notion-bookmark&quot; style=&quot;box-sizing: border-box; margin: 4px 0px; border-radius: var(--bookmark-border-radii); border: var(--bookmark-border); transition: background 120ms ease-in;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit; display: flex;&quot; href=&quot;https://malwareanalysis.tistory.com/tag/ArgoCD&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
&lt;div class=&quot;notion-bookmark__content&quot; style=&quot;box-sizing: border-box; overflow: hidden; flex: 4 1 180px; padding: var(--bookmark-padding);&quot;&gt;
&lt;h5 class=&quot;notion-bookmark__title&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 2px; line-height: 1.25rem; font-size: 0.875rem; text-wrap-mode: nowrap; overflow: hidden; text-overflow: ellipsis;&quot;&gt;'ArgoCD' 태그의 글 목록&lt;/h5&gt;
&lt;p class=&quot;notion-bookmark__description&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-size: 0.75rem; line-height: 1rem; opacity: 0.6; height: 2rem; overflow: hidden;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. 3년차 데브옵스 엔지니어입니다. 주어진 상황에 좋은 결과를 내기 위해 노력합니다.&lt;/p&gt;
&lt;div class=&quot;notion-bookmark__link&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; margin-top: 6px;&quot;&gt;
&lt;div style=&quot;box-sizing: border-box; margin-inline-end: 6px; display: flex;&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: contain; color: transparent; object-position: center center;&quot; src=&quot;https://app.super.so/_next/image?url=https%3A%2F%2Fassets.super.so%2F0ab8fb47-8432-4782-a7bb-76734677af26%2Fimages%2F98dc5436-3b55-4cae-b25f-0fb7d1eda865%2Ftistory_favicon_32x32.ico&amp;amp;w=32&amp;amp;q=90&quot; srcset=&quot;/_next/image?url=https%3A%2F%2Fassets.super.so%2F0ab8fb47-8432-4782-a7bb-76734677af26%2Fimages%2F98dc5436-3b55-4cae-b25f-0fb7d1eda865%2Ftistory_favicon_32x32.ico&amp;amp;w=16&amp;amp;q=90 1x, /_next/image?url=https%3A%2F%2Fassets.super.so%2F0ab8fb47-8432-4782-a7bb-76734677af26%2Fimages%2F98dc5436-3b55-4cae-b25f-0fb7d1eda865%2Ftistory_favicon_32x32.ico&amp;amp;w=32&amp;amp;q=90 2x&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-size: 0.75rem; line-height: 1rem; text-wrap-mode: nowrap; overflow: hidden; text-overflow: ellipsis;&quot; data-ke-size=&quot;size16&quot;&gt;malwareanalysis.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;notion-bookmark__cover&quot; style=&quot;box-sizing: border-box; flex: 1 1 180px; position: relative; width: 500px; height: 6.75rem;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; display: block; object-fit: cover; border-radius: var(--bookmark-image-border-radii); width: 312.406px; height: 108px;&quot; src=&quot;https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Ftistory1.daumcdn.net%2Ftistory%2F3167687%2Fattach%2Fa2216de5879345f1ac6188ac8a2a145b&quot; alt=&quot;'ArgoCD' 태그의 글 목록&quot; width=&quot;250&quot; height=&quot;108&quot; /&gt;&lt;/div&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380358be0c71c679264b8&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Argo &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;CD&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;소개&lt;/span&gt; : Argo CD is a declarative, GitOps &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;continuous delivery tool&lt;/span&gt; for &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Kubernetes&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238093be21ecb54e959b57&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(기초) helm chart 를 통한 배포 실습&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23807ba4dde11317b813f4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;0.3.2. Argo CD 설치 및 기본 설정 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://artifacthub.io/packages/helm/argo/argo-cd&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;helm_chart&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238099a3bbd8289e0a3cfd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Argo CD 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c23803fa087c0f6ca65f23a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 네임스페이스 생성 및 파라미터 파일 작성
cd cicd-labs

kubectl create ns argocd
cat &amp;lt;&amp;lt;EOF &amp;gt; argocd-values.yaml
dex:
  enabled: false

server:
  service:
    type: NodePort
    nodePortHttps: 30002
  extraArgs:
    - --insecure  # HTTPS 대신 HTTP 사용
EOF

# 설치
helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd argo/argo-cd --version 7.8.13 -f argocd-values.yaml --namespace argocd

# 확인
kubectl get pod,svc,ep,secret,cm -n argocd
kubectl get crd | grep argo
kubectl get appproject -n argocd -o yaml

# configmap
kubectl get cm -n argocd argocd-cm -o yaml
kubectl get cm -n argocd argocd-rbac-cm -o yaml
...
data:
  policy.csv: &quot;&quot;
  policy.default: &quot;&quot;
  policy.matchMode: glob
  scopes: '[groups]'


# 최초 접속 암호 확인
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=&quot;{.data.password}&quot; | base64 -d ;echo
XxJMMJUv8MHZa-kk

# Argo CD 웹 접속 주소 확인 : 초기 암호 입력 (admin 계정)
open &quot;http://127.0.0.1:30002&quot; # macOS
# Windows OS경우 직접 웹 브라우저에서 http://127.0.0.1:30002 접속&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380f39918e83217a76de5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380829553f7f77555667c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Argo CD 웹 접속 확인&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23804d9f7dd06cae2b2ffd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;User info &amp;rarr; UPDATE PASSWORD 로 admin 계정 암호 변경 (&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;qwe12345&lt;/span&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c23805883f8fa38a2ecb0af&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380efaf6bfba026d190a1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본 정보 확인 (Settings) : Clusters, Projects, Accounts&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c23802a855ee63d921518a2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/537535ff-a247-4f1c-9baf-0cb5f1086301/CleanShot_2024-12-15_at_17.06.11/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/537535ff-a247-4f1c-9baf-0cb5f1086301/CleanShot_2024-12-15_at_17.06.11/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/537535ff-a247-4f1c-9baf-0cb5f1086301/CleanShot_2024-12-15_at_17.06.11/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;88.38240917782026&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23808a815edd8900073a57&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23806abf32c1cd92f0b6b7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238035a955f8b6dd2651f4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Vault 개요&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380448466d88c35faa1d9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;1.1. &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; background-color: var(--color-bg-gray);&quot; class=&quot;highlighted-background bg-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Vault란?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; - &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/what-is-vault&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c238021b1b4c8695829c835&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;HashiCorp Vault는 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;신원 기반(identity-based)의 시크릿 및 암호화 관리 시스템&lt;/span&gt;&lt;/span&gt;입니다. 이 시스템은 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증(authentication)&lt;/span&gt;&lt;/span&gt; 및 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가(authorization)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt; &lt;/span&gt;방법을 통해 암호화 서비스를 제공하여 비밀에 대한 안전하고 감사 가능하며 제한된 접근을 보장합니다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c238061b1cafd1d180caee4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;시크릿(Secret)&lt;/span&gt;&lt;/span&gt;이란 접근을 철저히 통제하고자 하는 모든 것을 의미하며, 예를 들어 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;토큰, API 키, 비밀번호, 암호화 키 또는 인증서&lt;/span&gt;&lt;/span&gt; 등이 이에 해당합니다. Vault는 모든 시크릿에 대해 통합된 인터페이스를 제공하면서, 엄격한 접근 제어와 상세한 감사 로그 기록 기능을 제공합니다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c23803799d5fdf2657c2b3b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;외부 서비스용 API 키, 서비스 지향 아키텍처 간 통신을 위한 자격 증명 등은 플랫폼에 따라 누가 어떤 비밀에 접근했는지를 파악하기 어려울 수 있습니다. 여기에 키 롤링(교체), 안전한 저장, 상세한 감사 로그까지 추가하려면 별도의 커스텀 솔루션 없이는 거의 불가능합니다. Vault는 바로 이 지점에서 해결책을 제공합니다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380c29614f3f9dc3187c1&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault는 클라이언트(사용자, 기계, 애플리케이션 등)를 검증하고 인가한 후에만 비밀이나 저장된 민감한 데이터에 접근할 수 있도록 합니다.&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c23806fb9a4f5d01e4e77b3&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/47f8cd00-bf3a-422f-8cee-cae77ce33341/image/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/47f8cd00-bf3a-422f-8cee-cae77ce33341/image/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/47f8cd00-bf3a-422f-8cee-cae77ce33341/image/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;513&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380e0a446df2630776319&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;관련 이미지 및 영상&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23806ebb60c181642c13f0&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/23a4f69f-0411-4364-84f7-aa411408581b/image/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/23a4f69f-0411-4364-84f7-aa411408581b/image/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/23a4f69f-0411-4364-84f7-aa411408581b/image/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;720&quot; height=&quot;465.5560905151661&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b89654d22f2182a7f7&quot; class=&quot;notion-embed&quot; style=&quot;box-sizing: border-box; width: 1080px; align-self: center;&quot;&gt;
&lt;div class=&quot;notion-embed__content&quot; style=&quot;box-sizing: border-box; display: flex; position: relative;&quot;&gt;
&lt;div class=&quot;notion-embed__container__wrapper align-start&quot; style=&quot;box-sizing: border-box; width: 1080px; display: flex; justify-content: start; padding-bottom: 297px;&quot;&gt;
&lt;div class=&quot;notion-embed__container&quot; style=&quot;box-sizing: border-box; position: absolute; min-height: 100px; max-width: 100%; height: 297px; margin: 0px auto; width: 528px;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/VYfl-DpZ5wM?rel=0&quot; width=&quot;300&quot; height=&quot;225&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
HashiCorp 공동 창업자이자 CTO인 Armon Dadgar가 소개하는 Vault 영상&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238020afbef98a5585cd26&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c23808b9a58d06bb9a56a6c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;1.2. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;대표적인 시크릿의 종류&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23800a8109f62372c86829&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;비밀번호&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238073af19db69480b4f29&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Cloud Credentials : AWS, GCP, Azure, NCP&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23806283eae761bfb52f54&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Database Credentials : MySQL,&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238091aad4d258e119f3d1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;SSH Key&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23800ebfb9c69c3d3703af&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Token, API Key : GitHub, Telegram, Slack, OpenAI, Claude&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238037a5f7d9c66594d3a1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인증서(PKI, TLS 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380679d1ffcf40fa0f9f8&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;그 밖에 어떤 대표적인 Secret이 있을까요? &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23807c9e19f85a33208e1b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380a2a4baf4b098d372fa&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;1.3. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Vault의 동작방식? - &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/what-is-vault#how-does-vault-work&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380599083cb00fd9a4108&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault는 주로 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;토큰(Token)&lt;/span&gt;&lt;/span&gt;을 기반으로 작동하며, 이 토큰은 클라이언트의 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;정책(Policy)&lt;/span&gt;&lt;/span&gt;과 연결되어 있습니다. 각 정책은 경로(path) 기반으로 설정되며, 정책 규칙은 클라이언트가 해당 경로에서 수행할 수 있는 작업과 접근 가능성을 제한합니다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c238076861af2e0b34133f9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault에서는 토큰을 수동으로 생성해 클라이언트에 할당할 수도 있고, 클라이언트가 로그인하여 토큰을 직접 획득할 수도 있습니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380ed9836e2907f341df7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 Vault의 핵심 워크플로우를 보여줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c238036814bced9b76cc667&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/7e57d8e9-db23-41bc-9bbc-f111f32949fb/image/w=1080,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/7e57d8e9-db23-41bc-9bbc-f111f32949fb/image/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/7e57d8e9-db23-41bc-9bbc-f111f32949fb/image/w=1080,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;528&quot; height=&quot;572.5301204819277&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c238022a939caf1a10bc25d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; background-color: var(--color-bg-blue);&quot; class=&quot;highlighted-background bg-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Vault의 핵심 워크플로우는 다음 네 단계로 구성됩니다:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380808799e9cb6ccfa423&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증 (Authenticate)&lt;/span&gt;: Vault에서 인증은 클라이언트가 Vault에 자신이 누구인지 증명할 수 있는 정보를 제공하는 과정입니다. 클라이언트가 인증 메서드를 통해 인증되면, 토큰이 생성되고 정책과 연결됩니다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380d18cc9f9f5130b401d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;검증 (Validation)&lt;/span&gt;: Vault는 Github, LDAP, AppRole 등과 같은 신뢰할 수 있는 외부 소스를 통해 클라이언트를 검증합니다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23804488b6d8182a48e632&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인가 (Authorize)&lt;/span&gt;: 클라이언트는 Vault의 보안 정책과 비교됩니다. 이 정책은 Vault 토큰을 사용하여 클라이언트가 접근할 수 있는 API 엔드포인트를 정의하는 규칙의 집합입니다. 정책은 Vault 내 특정 경로나 작업에 대한 접근을 허용하거나 거부하는 선언적 방식으로 권한을 제어합니다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380a0b3eff2af756f4037&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;접근 (Access)&lt;/span&gt;: Vault는 클라이언트의 신원에 연관된 정책을 기반으로 토큰을 발급하여 비밀, 키, 암호화 기능 등에 대한 접근을 허용합니다. 클라이언트는 이후 작업에서 해당 Vault 토큰을 사용할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23806f9748ff63a12fd189&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c23801f8355ef80078899e6&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;1.4. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;왜 Vault가 필요한가요?&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c23803cb743f8f83db0e56b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;오늘날 대부분의 기업은 자격 증명이 조직 전반에 걸쳐 무분별하게 퍼져 있습니다. 비밀번호, API 키, 자격 증명 등이 일반 텍스트로 앱 소스 코드, 설정 파일, 기타 여러 위치에 저장되어 있습니다. 자격 증명이 이처럼 여기저기 흩어져 있으면 누가 무엇에 접근하고 권한이 있는지를 명확히 파악하기 어렵고, 그로 인해 큰 부담이 따릅니다. 일반 텍스트로 자격 증명을 저장하면 내부 공격자든 외부 공격자든 악의적인 공격 가능성이 크게 증가합니다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c238014aefecd439628e985&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault는 이러한 문제를 해결하기 위해 설계되었습니다. Vault는 이러한 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모든 자격 증명을 한 곳에 중앙 집중화&lt;/span&gt;&lt;/span&gt;하여 정의함으로써, 자격 증명의 불필요한 노출을 줄입니다. 하지만 Vault는 여기서 멈추지 않고, 사용자, 애플리케이션, 시스템이 인증 및 명시적으로 인가된 후에만 리소스에 접근할 수 있도록 보장하며, 클라이언트의 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;모든 작업 기록을 추적하고 저장하는 감사 로그&lt;/span&gt;&lt;/span&gt; 기능도 제공합니다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c23800d9456e48078e3ef46&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault의 주요 기능은 다음과 같습니다:&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c238004ac98e552fd1d6194&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1. 안전한 비밀 저장 (Secure Secret Storage): &amp;rarr; &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Static 시크릿&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380119b3fce3bd736de7e&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault는 임의의 key/value 형식의 시크릿을 저장할 수 있으며, 이 시크릿은 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;영구 저장소에 기록되기 전에 암호화&lt;/span&gt;&lt;/span&gt;됩니다. 따라서 저장소에 직접 접근하더라도 비밀을 열람할 수 없습니다. Vault는 Disk, Consul 등 다양한 저장소를 지원합니다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c23806a8719e4ac424baee6&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2. 동적 비밀 (Dynamic Secrets):&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380929737d2e2801d042b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault는 AWS나 SQL 데이터베이스와 같은 일부 시스템에 대해 요청 시 비밀을 동적으로 생성할 수 있습니다. 예를 들어, 애플리케이션이 S3 버킷에 접근해야 할 때 Vault에 자격 증명을 요청하면, Vault는 해당 권한을 가진 AWS 키쌍을 생성해줍니다. 이 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;동적 시크릿은 일정 시간이 지나면 자동으로 폐기&lt;/span&gt;&lt;/span&gt;됩니다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c238096b26de157517492ac&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3. 데이터 암호화 (Data Encryption):&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c23808086cbd292fe2dd6e9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault는 데이터를 저장하지 않고 암호화 및 복호화를 수행할 수 있습니다. 이를 통해 보안 팀은 암호화 매개변수를 정의하고, 개발자는 암호화된 데이터를 SQL 데이터베이스 등 외부 저장소에 안전하게 저장할 수 있습니다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380079b35e4cada753e36&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4. 임대 및 갱신 (Leasing and Renewal):&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c238055972ddd563aa22bc7&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault에 저장된 모든 시크릿은 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;임대 기간(lease)이 설정&lt;/span&gt;&lt;/span&gt;되어 있으며, 이 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기간이 끝나면 해당 비밀은 자동으로 폐기&lt;/span&gt;&lt;/span&gt;됩니다. 클라이언트는 내장된 갱신 API를 통해 임대를 연장할 수 있습니다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c23800abf39c14097c94459&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5. 폐기 (Revocation):&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380f38e31d6bfea5566d9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault는 비밀 폐기를 기본적으로 지원합니다. 단일 비밀뿐만 아니라 특정 사용자에 의해 읽힌 모든 비밀, 또는 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;특정 유형의 모든 비밀 등 비밀의 계층 구조 전체를 폐기&lt;/span&gt;&lt;/span&gt;할 수 있습니다. 이 기능은 키 롤링이나 침입 발생 시 시스템을 신속하게 차단하는 데 유용합니다.&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380e0a452e927ca39267b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380c18e61c2bcadbeaf01&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;1.5. &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Vault 요약&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-table__wrapper&quot; style=&quot;box-sizing: border-box; overflow-x: auto;&quot;&gt;
&lt;table class=&quot;notion-table col-header row-header&quot; style=&quot;margin: 8px 0px 18px; border-collapse: collapse;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;
&lt;tr style=&quot;box-sizing: border-box; background: var(--color-bg-yellow);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background: var(--color-color-default); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;특징&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px; background: var(--color-color-default);&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;HashiCorp Vault&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background-color: var(--color-bg-gray); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;주요 기능&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;다양한 환경과 플랫폼에서 secret을 저장, 액세스 및 배포하기 위한 포괄적인 secret 관리 솔루션&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background-color: var(--color-bg-gray); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;암호화&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;높은 유연성과 보안을 위해 여러 암호화 백엔드(예: AWS KMS, Azure Key Vault, GCP KMS)를 지원하는 고급 암호화 메커니즘을 제공합니다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background-color: var(--color-bg-gray); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;접근 제어&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;역할, 경로 및 작업을 기반으로 세분화된 권한을 허용하는 세부적인 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;액세스 제어 정책(ACL)&lt;/span&gt;을 구현합니다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background-color: var(--color-bg-gray); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;동적 secret&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;데이터베이스, 클라우드 자격 증명, SSH 키와 같은 리소스에 대한 일시적이고 주문형 액세스를 제공하여 동적 secret 생성을 지원합니다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background-color: var(--color-bg-gray); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;감사 로깅&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;모든 작업과 액세스 요청을 추적하여 책임과 추적성을 보장하기 위한 포괄적인 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;감사 로그를 제공&lt;/span&gt;합니다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background-color: var(--color-bg-gray); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;완성&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;Kubernetes, Terraform, Jenkins 및 클라우드 공급자와 같은 광범위한 도구 및 서비스와의 광범위한 통합을 통해 광범위한 애플리케이션 범위가 가능합니다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background-color: var(--color-bg-gray); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;설치 복잡성&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;서버 배포 및 구성을 포함한 더 많은 설정 및 인프라가 필요하며 학습 곡선이 더 가파를 수 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background-color: var(--color-bg-gray); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;secret rotation&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;자동화된 secret rotation을 지원하여 secret이 정기적으로 업데이트되고 노출 위험이 최소화되도록 합니다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background-color: var(--color-bg-gray); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;API 및 CLI&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;다양한 작업을 위한 vault와의 광범위한 프로그래밍 액세스 및 상호 작용을 허용하는 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;풍부한 API 및 CLI를 제공&lt;/span&gt;합니다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background-color: var(--color-bg-gray); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;사용 사례&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;동적 secret 생성, 서비스로서의 암호화, 다양한 애플리케이션 및 환경에서의 안전한 데이터 저장을 포함한 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;광범위한 사용 사례&lt;/span&gt;에 적합합니다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background-color: var(--color-bg-gray); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;전개&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;최적의 성능과 보안을 위해 전용 인프라와 리소스가 필요한 독립 실행형 서비스로 배포됨&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background-color: var(--color-bg-gray); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;확장성&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;분산 환경에서 대량의 secret과 여러 클라이언트를 처리할 수 있는 높은 확장성&lt;/span&gt;을 위해 설계되었습니다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background-color: var(--color-bg-gray); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;버전 관리&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;secret 버전 관리를 지원&lt;/span&gt;하여 사용자가 시간 경과에 따라 다양한 버전의 secret을 추적하고 관리할 수 있도록 합니다.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); background-color: var(--color-bg-gray); min-width: 172px; max-width: 172px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;오픈소스&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 1002px; max-width: 1002px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;추가 기능과 지원을 제공하는 엔터프라이즈 버전과 함께 오픈 소스 도구로 사용 가능&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238017a568cf99884d14e6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;1.6. 시크릿을 관리할 수 있는 여러 방법&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380b3be50df3295acf10c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;private 망에 있는 각 서버들의 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;.evn&lt;/code&gt;에 환경변수로 저장하여 관리&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380648dd5f0b05936c9d7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;server마다 환경변수 세팅하여 관리해야하는 번거로움&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380d9afc9ead7f6b615b7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;FE에서는 server가 없으므로 server 환경변수로는 관리 어려움&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23809f9ecbd953c7815470&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;정보의 파편화가 올라감&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380099f42e1a22f2983ba&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Jenkins, Github, Dockerhub 등의 Credentials에 등록하여 관리&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23805f8b47d84645206ce7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;github이나 dockerhub는 repository 종속적이고, 같은 정보를 repository마다 각각 세팅하여 관리해야 함&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380e8bd5cf2f3a49f8bd0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;정보의 파편화가 올라감&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d3b8b2c1c23803186c7f18576a2b1ac&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Jenkins Config file Provider 활용&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23805b965bf126ad1e5c97&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;jenkins에서 build시에 주입할 수 있는 장점&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380ffa268e498be16a74b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;audit log를 관리하기 어려움&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d3b8b2c1c23809d998be615f42221ce&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Secret Management System 사용하여 관리&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238029b903e39494938f06&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;비용, 사용방법, 다양한 언어 제공 등의 학습 비용 발생&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238052bb7bc222b99d96c1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;초기 진입 허들&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380eba7c0e902533257e9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380f79109f7e3e0ac84c0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;1.7. Vault 동작 방식 이해하기&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380329265d3e5cb6db52f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; background-color: var(--color-bg-yellow);&quot; class=&quot;highlighted-background bg-yellow&quot;&gt;호텔 체크인 절차에 비유한 Vault의 동작방식 이해&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380aaaac1c0988f7802b7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;개별 ID 인증/인가를 통해 필요한 자격 증명을 동적을 발급&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380baa581e9cb039cd573&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/3fca3aae-971e-4f09-84ac-2c73c27280e3/image/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/3fca3aae-971e-4f09-84ac-2c73c27280e3/image/w=828,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/3fca3aae-971e-4f09-84ac-2c73c27280e3/image/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;768&quot; height=&quot;432&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380c7af71d2756509e54b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380819d5cc7db9911a5e0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;1.8. Vault 내부 아키텍처 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/internals/architecture&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380f695f7db177947549a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;High Level&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c238099ae80c2b55fda5cd8&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5a08698a-42db-4f6e-8e3f-1d2c94697f96/image/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5a08698a-42db-4f6e-8e3f-1d2c94697f96/image/w=750,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5a08698a-42db-4f6e-8e3f-1d2c94697f96/image/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;375.2669322709163&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238093917afc301e3dfc07&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;2&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;2&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23802f9bfbc46cee072be1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Kubernetes에 Vault 설치 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;- &lt;/span&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/tutorials/kubernetes/kubernetes-raft-deployment-guide&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs1&lt;/a&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/helm&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs2&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380e39af7f97dad6c4dde&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;2.1. 실습환경 구성&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380da8113e76d48166bb8&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step1. Helm을 사용한 Vault 배포 - &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238079ad95d233f3c73903&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네임스페이스 생성 및 Helm Repo 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380e69aa5c169873442c3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# Create a Kubernetes namespace.
kubectl create namespace vault

# View all resources in a namespace.
kubectl get all --namespace vault

# Setup Helm repo
helm repo add hashicorp https://helm.releases.hashicorp.com

# Check that you have access to the chart.
helm search repo hashicorp/vault
# NAME                                    CHART VERSION   APP VERSION     DESCRIPTION                          
# hashicorp/vault                         0.30.0          1.19.0          Official HashiCorp Vault Chart       
# hashicorp/vault-secrets-gateway         0.0.2           0.1.0           A Helm chart for Kubernetes          
# hashicorp/vault-secrets-operator        0.10.0          0.10.0          Official Vault Secrets Operator Chart&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380d8a57ef2539c246755&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Helm Chart 설정 Values 설정 및 배포 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/tutorials/kubernetes/kubernetes-raft-deployment-guide#configure-vault-helm-chart&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;참고1&lt;/a&gt;, &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/helm/configuration&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;참고2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380daaf87d0adde836805&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; override-values.yaml
global:
  enabled: true
  tlsDisable: true  # Disable TLS for demo purposes

server:
  image:
    repository: &quot;hashicorp/vault&quot;
    tag: &quot;1.19.0&quot;

  standalone:
    enabled: true
    replicas: 1  # 단일 노드 실행

    config: |
      ui = true
      disable_mlock = true
      cluster_name = &quot;vault-local&quot;

      listener &quot;tcp&quot; {
        address = &quot;[::]:8200&quot;
        cluster_address = &quot;[::]:8201&quot;
        tls_disable = 1
      }

      storage &quot;raft&quot; { # Raft 구성 권장
        path = &quot;/vault/data&quot;
        node_id = &quot;vault-dev-node-1&quot;
      }
  service:
    enabled: true
    type: NodePort
    port: 8200
    targetPort: 8200
    nodePort: 30000   # Kind에서 열어둔 포트 중 하나 사용

injector:
  enabled: true

ui:
  enabled: true
  serviceType: &quot;NodePort&quot;
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238051acfedfaff1a490b9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# Helm Install 실행
helm upgrade vault hashicorp/vault -n vault -f override-values.yaml --install

# 네임스페이스 변경 : vault
kubens vault
Context &quot;kind-myk8s&quot; modified.
Active namespace is &quot;vault&quot;.

# 배포확인
k get pods,svc,pvc

NAME                                        READY   STATUS              RESTARTS   AGE
pod/vault-0                                 0/1     ContainerCreating   0          14s
pod/vault-agent-injector-56459c7545-sgtth   1/1     Running             0          15s

NAME                               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
service/vault                      NodePort    10.96.120.103   &amp;lt;none&amp;gt;        8200:30000/TCP,8201:32281/TCP   15s
service/vault-agent-injector-svc   ClusterIP   10.96.249.165   &amp;lt;none&amp;gt;        443/TCP                         15s
service/vault-internal             ClusterIP   None            &amp;lt;none&amp;gt;        8200/TCP,8201/TCP               15s
service/vault-ui                   NodePort    10.96.105.103   &amp;lt;none&amp;gt;        8200:31916/TCP                  15s

NAME                                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/data-vault-0   Bound    pvc-c6dcf24c-acdb-4b13-b1c2-064207a206fb   10Gi       RWO            standard       &amp;lt;unset&amp;gt;                 15s&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238084a742e437d78d1e3f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23806c9ef9cfa9c33f4540&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step2. Vault 초기화 및 잠금해제&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238052b04deddd8c52d3e7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;상태확인&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380e69eedfc0a8869f040&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# Vault Status 명령으로 Sealed 상태확인
kubectl exec -ti vault-0 -- vault status&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238000bf54d525bb4a3cda&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;init-unseal.sh&lt;/code&gt; 을 사용하여 Vault Unseal 자동화 - &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://en.wikipedia.org/wiki/Shamir%27s_secret_sharing&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Shamir Secret Sharing&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 방식이란?&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380fba05de2368b71d0bd&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; init-unseal.sh
#!/bin/bash

# Vault Pod 이름
VAULT_POD=&quot;vault-0&quot;

# Vault 명령 실행
VAULT_CMD=&quot;kubectl exec -ti \$VAULT_POD -- vault&quot;

# 출력 저장 파일
VAULT_KEYS_FILE=&quot;./vault-keys.txt&quot;
UNSEAL_KEY_FILE=&quot;./vault-unseal-key.txt&quot;
ROOT_TOKEN_FILE=&quot;./vault-root-token.txt&quot;

# Vault 초기화 (Unseal Key 1개만 생성되도록 설정)
\$VAULT_CMD operator init -key-shares=1 -key-threshold=1 | sed \$'s/\\x1b\\[[0-9;]*m//g' | tr -d '\r' &amp;gt; &quot;\$VAULT_KEYS_FILE&quot;

# Unseal Key / Root Token 추출
grep 'Unseal Key 1:' &quot;\$VAULT_KEYS_FILE&quot; | awk -F': ' '{print \$2}' &amp;gt; &quot;\$UNSEAL_KEY_FILE&quot;
grep 'Initial Root Token:' &quot;\$VAULT_KEYS_FILE&quot; | awk -F': ' '{print \$2}' &amp;gt; &quot;\$ROOT_TOKEN_FILE&quot;

# Unseal 수행
UNSEAL_KEY=\$(cat &quot;\$UNSEAL_KEY_FILE&quot;)
\$VAULT_CMD operator unseal &quot;\$UNSEAL_KEY&quot;

# 결과 출력
echo &quot;[ ] Vault Unsealed!&quot;
echo &quot;[ ] Root Token: \$(cat \$ROOT_TOKEN_FILE)&quot;
EOF

# 실행 권한 부여
chmod +x init-unseal.sh

# 실행
./init-unseal.sh&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380529325d63fab170368&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;vault status&lt;/code&gt; 명령을 사용하여 Unseal 되었는지 확인한다 &amp;rarr; &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Sealed=false&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380d783f9c19f42e1173e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;kubectl exec -ti vault-0 -- vault status

Key                     Value
---                     -----
Seal Type               shamir
Initialized             true
Sealed                  false
Total Shares            1
Threshold               1
Version                 1.19.0
Build Date              2025-03-04T12:36:40Z
Storage Type            raft
Cluster Name            vault-local
Cluster ID              90fbefc2-3218-c047-43de-23a11223d869
Removed From Cluster    false
HA Enabled              true
HA Cluster              https://vault-0.vault-internal:8201
HA Mode                 active
Active Since            2025-04-12T05:19:35.118981221Z
Raft Committed Index    37
Raft Applied Index      37&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380a7ae4fea260ba3327d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380e8aaefcd931c64b2ef&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;(참고) UI에 접속해서 Unseal Key 입력도 가능&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380eeb337d6fc736479d7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/d9ed1b64-3651-4936-ba3c-a8d58a191388/image/w=1080,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/d9ed1b64-3651-4936-ba3c-a8d58a191388/image/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/d9ed1b64-3651-4936-ba3c-a8d58a191388/image/w=1080,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;432&quot; height=&quot;318.8471275559883&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380009aeed65cc383cd28&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1080px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380159e5fc4159a5b6f04&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이제 Unseal이 마무리 되었으므로 Root Token 값을 사용하여 UI에 접속할 수 있습니다.&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380ed9807f6e80d1dfffb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380cf9617c95177ca4ca0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Root Token 입력 후 Vault UI 화면 - &lt;/span&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vault-root-token.txt&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 파일에서 획득&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380f2ad91fdd929743e62&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;open &quot;http://$MyIP:30000&quot;

#token은 앞에서 unseal을 통해 획득한 root token을 입력!!
hvs.GdQtl6yNEcSeeDSGXCXVQRzx&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23802b8f2ce8dd368c4da0&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1080px; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; width: 1080px; object-fit: contain; border-radius: var(--image-border-radii); color: transparent; object-position: center center;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5d901860-8892-4f68-82b2-c3be8ee433fc/image/w=3840,quality=90,fit=scale-down&quot; sizes=&quot;(max-width: 546px) 100vw, 100vw&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5d901860-8892-4f68-82b2-c3be8ee433fc/image/w=640,quality=90,fit=scale-down 640w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5d901860-8892-4f68-82b2-c3be8ee433fc/image/w=750,quality=90,fit=scale-down 750w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5d901860-8892-4f68-82b2-c3be8ee433fc/image/w=828,quality=90,fit=scale-down 828w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5d901860-8892-4f68-82b2-c3be8ee433fc/image/w=1080,quality=90,fit=scale-down 1080w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5d901860-8892-4f68-82b2-c3be8ee433fc/image/w=1200,quality=90,fit=scale-down 1200w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5d901860-8892-4f68-82b2-c3be8ee433fc/image/w=1920,quality=90,fit=scale-down 1920w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5d901860-8892-4f68-82b2-c3be8ee433fc/image/w=2048,quality=90,fit=scale-down 2048w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/5d901860-8892-4f68-82b2-c3be8ee433fc/image/w=3840,quality=90,fit=scale-down 3840w&quot; alt=&quot;image&quot; width=&quot;4112&quot; height=&quot;2398&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380e3bde4c1e224618036&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b5925cda3df94d6f80&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step3. CLI 설정(MacOS) - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/install&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; / &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/install/install-binary&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;수동설치&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380fb9dc1ffa774a578cf&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;brew tap hashicorp/tap
brew install hashicorp/tap/vault

vault --version  # 설치 확인
Vault v1.19.1 (aa75903ec499b2236da9e7bbbfeb7fd16fa4fd9d), built 2025-04-02T15:43:01Z

# NodePort로 공개한 30000 Port로 설정
export VAULT_ADDR='http://localhost:30000'

# vault 상태확인
vault status

# Root Token으로 로그인
vault login

Token (will be hidden): 
Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run &quot;vault login&quot;
again. Future Vault requests will automatically use this token.

Key                  Value
---                  -----
token                hvs.egeVgnhMKgnFqof6YLfiPtLa
token_accessor       wWpBsO3TqQEybFF0le2YmNGX
token_duration       &amp;infin;
token_renewable      false
token_policies       [&quot;root&quot;]
identity_policies    []
policies             [&quot;root&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238030a4c2f28efc9ecc3c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380d3922cfeb87c62f127&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c238041bc37fc0e7c2a575c&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;2.2. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;KV 시크릿 엔진 활성화 및 샘플 구성 &amp;rarr; Static Secret&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380b0b7bafe4d5e6d7bff&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rarr; Vault KV version 2 엔진을 활성화하고 샘플 데이터를 저장합니다. &amp;rarr; Version1 : KV 버전관리 불가 / &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Version2 : KV 버전관리 가능&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c23809491cdf133ce7c6bce&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step 1. KV 엔진 활성화 및 샘플 데이터 추가&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380afb043f8694398224f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# KV v2 형태로 엔진 활성화
vault secrets enable -path=secret kv-v2

# 샘플 시크릿 저장
vault kv put secret/sampleapp/config \
  username=&quot;demo&quot; \
  password=&quot;p@ssw0rd&quot;
  
# 입력된 데이터 확인
vault kv get secret/sampleapp/config

======== Secret Path ========
secret/data/sampleapp/config

======= Metadata =======
Key                Value
---                -----
created_time       2025-03-30T05:18:47.797852422Z
custom_metadata    &amp;lt;nil&amp;gt;
deletion_time      n/a
destroyed          false
version            1

====== Data ======
Key         Value
---         -----
password    p@ssw0rd
username    demo&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23801c9e42ef52cbd2a292&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step2. Vault UI : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;[Secrets Engine]&lt;/span&gt; 탭에 접속 후 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;[sampleapp - config]&lt;/span&gt; 접속하여 실제 저장된 Key / Value 확인&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23800ea657db009bef0220&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;username : demo&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380e29f3dd4963298e79e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;password : p@ssw0rd&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c23809f9fb2c95309c81c7b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/16220b04-90c3-41f6-a39b-629f5e590924/image/w=2048,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/16220b04-90c3-41f6-a39b-629f5e590924/image/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/16220b04-90c3-41f6-a39b-629f5e590924/image/w=2048,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;1008&quot; height=&quot;753.4780600461894&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238052a484e82d8227650c&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Step3. (참고) 경로 확인하는 명령 가이드&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c238012a794e64abafbdc18&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/31a3ee3f-6745-4a10-8093-3c368857e4cf/image/w=2048,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/31a3ee3f-6745-4a10-8093-3c368857e4cf/image/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/31a3ee3f-6745-4a10-8093-3c368857e4cf/image/w=2048,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;1008&quot; height=&quot;741.8818112049117&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238033b79efe563b71ac07&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# get kv secret with CLI
vault kv get -mount=&quot;secret&quot; &quot;sampleapp/config&quot;

======== Secret Path ========
secret/data/sampleapp/config

======= Metadata =======
Key                Value
---                -----
created_time       2025-04-12T05:28:41.258214793Z
custom_metadata    &amp;lt;nil&amp;gt;
deletion_time      n/a
destroyed          false
version            1

====== Data ======
Key         Value
---         -----
password    p@ssw0rd
username    demo&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380c48673cda856c2df5d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c238046b3bdff539c786bd4&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;2.3. &lt;span style=&quot;box-sizing: border-box; background-color: var(--color-bg-yellow);&quot; class=&quot;highlighted-background bg-yellow&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &amp;nbsp;추가 학습자료&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380bcbdd5d04cc4ee4e18&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/tutorials/kubernetes/kubernetes-security-concerns&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Vault on Kubernetes security considerations&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380edb8fbf1149dbc7aee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/tutorials/kubernetes/kubernetes-external-vault&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Integrate Kubernetes with an external Vault cluster&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; - &lt;/span&gt;&lt;/span&gt;&lt;a id=&quot;block-1d3b8b2c1c2380bfb48eebffb521723e&quot; class=&quot;notion-link notion-page eoi emoji&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline-flex; transition: background 120ms ease-in; color: inherit; position: relative; top: 3px;&quot; href=&quot;https://github.com/hashicorp-education/learn-vault-external-kubernetes&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: cover; object-position: center center;&quot; src=&quot;https://app.super.so/images/embeds/github.png&quot; alt=&quot;Embed GitHub&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-color: var(--color-border-dark); text-decoration-thickness: 1px; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;Embed GitHub&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380f3a740f403afe14f95&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/78879d7b-3279-474c-820f-ad31959c5a07/image/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/78879d7b-3279-474c-820f-ad31959c5a07/image/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/78879d7b-3279-474c-820f-ad31959c5a07/image/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;335.645101663586&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23804ba224fab34d55c444&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/tutorials/kubernetes/kubernetes-amazon-eks&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Vault installation to Amazon Elastic Kubernetes Service via Helm&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238041b258d67b44d1d505&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/tutorials/kubernetes/kubernetes-minikube-tls&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Install Vault to Kubernetes with TLS enabled&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380d7832cc274d750dc9d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380818917f28f466706c2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Vault Sidecar 연동(Vault agent) - &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/injector/examples&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크1&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://docmoa.github.io/04-HashiCorp/06-Vault/04-UseCase/vault-k8s-manually-using-the-sidecar.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크2&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380e28e49fefeaa2f7b2c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/agent-and-proxy/agent&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Vault Agent&lt;/a&gt; Sidecar 패턴을 이해하고, 앱(Pod)이 시크릿을 볼륨으로 마운트하여 사용하도록 구성한다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380ba9631d1d70ae91407&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Vault Agent Injector 구성을 위해 Helm Chart(&lt;a id=&quot;block-1d3b8b2c1c2380c4b8fde306117bcf21&quot; class=&quot;notion-link notion-page eoi emoji&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline-flex; transition: background 120ms ease-in; color: inherit; position: relative; top: 3px;&quot; href=&quot;https://github.com/hashicorp/vault-helm&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: cover; object-position: center center;&quot; src=&quot;https://app.super.so/images/embeds/github.png&quot; alt=&quot;Embed GitHub&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-color: var(--color-border-dark); text-decoration-thickness: 1px; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;Embed GitHub&lt;/span&gt;&lt;/a&gt;) 에서 활성화 해야하며, 을 활용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b49364cdb50a56b6e5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c23806389def785c01a93f5&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;3.1. &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/injector/examples#before-using-the-vault-agent-injector&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;공식문서&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 요약(ChatGPT)&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c23807987b8e27f0a589fff&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault Agent Injector는 Kubernetes Pod 내부에 Vault Agent를 자동으로 주입해주는 기능입니다. 이를 통해 어플리케이션이 Vault로부터 자동으로 비밀 정보를 받아올 수 있게 됩니다. 하지만 이를 사용하기 전에 몇 가지 사전 준비가 필요합니다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380e88311d787f994ce39&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1. Vault가 설치되어 있고, Kubernetes와 통합되어 있어야 합니다&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380e98394db0e8db45077&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Vault가 실행 중이어야 하고, Kubernetes 클러스터에 접근 가능해야 합니다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380b8af5ac7e370daa9ec&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Vault는 Kubernetes 인증 방식을 설정하고 있어야 하며, 이를 통해 서비스 어카운트를 기반으로 토큰을 발급받을 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380638407f9014ba8cbd8&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2. Vault Agent Injector가 클러스터에 배포되어 있어야 합니다&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23809a8a8ce14d6b7f31d3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Injector는 Kubernetes에 배포되는 별도의 구성 요소입니다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238086a207cb8bd2996ab8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;일반적으로 Helm Chart를 통해 배포하며, 이 컴포넌트가 있어야 Pod에 Vault Agent가 자동으로 주입됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380738e4bc252df681e84&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3. Kubernetes 인증 방식이 활성화되어야 합니다&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23800d870bcbf2e30fbba6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Vault에서 Kubernetes Auth Method를 활성화하고 구성해야 합니다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23802bbbe6d923f15eec19&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 설정을 통해 특정 서비스 어카운트에 Vault 접근 권한을 부여할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380e58cf2d2d05d672c6f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4. 정책과 역할이 정의되어 있어야 합니다&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23804c8336c7bc2a8df376&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Vault에 접근할 수 있도록 적절한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Policy&lt;/span&gt;와 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Role&lt;/span&gt;이 설정되어야 합니다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380ba926cc0472dfae727&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어, 특정 서비스 어카운트가 특정 경로의 시크릿에만 접근할 수 있도록 제한할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1d3b8b2c1c23805497b3ef3e24641f8a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5. 애플리케이션 Pod에 주입할 주석(&lt;/span&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;annotation&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;)을 추가해야 합니다&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380ef8647f002bf947ef4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Vault Agent Injector는 특정 주석이 있는 Pod에 대해서만 Vault Agent를 주입합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c23800bac61d06098b6b23a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;vault.hashicorp.com/agent-inject: &quot;true&quot;
vault.hashicorp.com/role: &quot;example-role&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380298749cd0f383a953f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380fe9d0cfa4d5b6d3d9a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;3.2. &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: inherit; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Vault Kubernetes Sidecar 아키텍처 및 워크플로우&lt;/code&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380d49f91ccb12eec903f&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1112px; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; width: 1112px; object-fit: contain; border-radius: var(--image-border-radii); color: transparent; object-position: center center;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/dfc05dd8-a247-493c-aade-6a22744c5a6b/image/w=3840,quality=90,fit=scale-down&quot; sizes=&quot;(max-width: 546px) 100vw, 100vw&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/dfc05dd8-a247-493c-aade-6a22744c5a6b/image/w=640,quality=90,fit=scale-down 640w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/dfc05dd8-a247-493c-aade-6a22744c5a6b/image/w=750,quality=90,fit=scale-down 750w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/dfc05dd8-a247-493c-aade-6a22744c5a6b/image/w=828,quality=90,fit=scale-down 828w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/dfc05dd8-a247-493c-aade-6a22744c5a6b/image/w=1080,quality=90,fit=scale-down 1080w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/dfc05dd8-a247-493c-aade-6a22744c5a6b/image/w=1200,quality=90,fit=scale-down 1200w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/dfc05dd8-a247-493c-aade-6a22744c5a6b/image/w=1920,quality=90,fit=scale-down 1920w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/dfc05dd8-a247-493c-aade-6a22744c5a6b/image/w=2048,quality=90,fit=scale-down 2048w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/dfc05dd8-a247-493c-aade-6a22744c5a6b/image/w=3840,quality=90,fit=scale-down 3840w&quot; alt=&quot;이미지 출처: &quot; width=&quot;3242&quot; height=&quot;1070&quot; data-nimg=&quot;1&quot; /&gt;이미지 출처: 
&lt;div&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.hashicorp.com/en/blog/kubernetes-vault-integration-via-sidecar-agent-injector-vs-csi-provider&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;HashiCorp 공식 블로그&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238060bf97f402cf44ba16&quot; class=&quot;notion-column-list&quot; style=&quot;box-sizing: border-box; display: flex; flex-wrap: wrap;&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380cdafc6effe0b8139ff&quot; class=&quot;notion-column&quot; style=&quot;box-sizing: border-box; padding: 12px 0px; word-break: break-word; display: flex; flex-direction: column; width: calc((100% - var(--column-spacing) * 1) * 0.5);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380429672ec8fd1705dbf&quot; class=&quot;notion-image align-center normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: center; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/91732b46-a466-457f-ad8f-4e6f8daa5f7a/image/w=3840,quality=90,fit=scale-down&quot; sizes=&quot;(max-width: 546px) 100vw, 50vw&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/91732b46-a466-457f-ad8f-4e6f8daa5f7a/image/w=384,quality=90,fit=scale-down 384w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/91732b46-a466-457f-ad8f-4e6f8daa5f7a/image/w=640,quality=90,fit=scale-down 640w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/91732b46-a466-457f-ad8f-4e6f8daa5f7a/image/w=750,quality=90,fit=scale-down 750w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/91732b46-a466-457f-ad8f-4e6f8daa5f7a/image/w=828,quality=90,fit=scale-down 828w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/91732b46-a466-457f-ad8f-4e6f8daa5f7a/image/w=1080,quality=90,fit=scale-down 1080w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/91732b46-a466-457f-ad8f-4e6f8daa5f7a/image/w=1200,quality=90,fit=scale-down 1200w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/91732b46-a466-457f-ad8f-4e6f8daa5f7a/image/w=1920,quality=90,fit=scale-down 1920w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/91732b46-a466-457f-ad8f-4e6f8daa5f7a/image/w=2048,quality=90,fit=scale-down 2048w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/91732b46-a466-457f-ad8f-4e6f8daa5f7a/image/w=3840,quality=90,fit=scale-down 3840w&quot; alt=&quot;이미지 출처: &quot; width=&quot;467.9855041503906&quot; height=&quot;215.99330960787262&quot; data-nimg=&quot;1&quot; /&gt;이미지 출처: 
&lt;div&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://docmoa.github.io/04-HashiCorp/06-Vault/04-UseCase/vault-k8s-manually-using-the-sidecar.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;docmoa&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238014b6cfee8af93d6b05&quot; class=&quot;notion-column&quot; style=&quot;box-sizing: border-box; padding: 12px 0px; word-break: break-word; display: flex; flex-direction: column; width: calc((100% - var(--column-spacing) * 1) * 0.5); margin-inline-start: var(--column-spacing);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c238071b0a8f90c5c8d1fe3&quot; class=&quot;notion-image align-center normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: center; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ef0db7ab-5699-4f89-ab74-2a795a6d0d64/image/w=3840,quality=90,fit=scale-down&quot; sizes=&quot;(max-width: 546px) 100vw, 50vw&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ef0db7ab-5699-4f89-ab74-2a795a6d0d64/image/w=384,quality=90,fit=scale-down 384w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ef0db7ab-5699-4f89-ab74-2a795a6d0d64/image/w=640,quality=90,fit=scale-down 640w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ef0db7ab-5699-4f89-ab74-2a795a6d0d64/image/w=750,quality=90,fit=scale-down 750w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ef0db7ab-5699-4f89-ab74-2a795a6d0d64/image/w=828,quality=90,fit=scale-down 828w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ef0db7ab-5699-4f89-ab74-2a795a6d0d64/image/w=1080,quality=90,fit=scale-down 1080w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ef0db7ab-5699-4f89-ab74-2a795a6d0d64/image/w=1200,quality=90,fit=scale-down 1200w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ef0db7ab-5699-4f89-ab74-2a795a6d0d64/image/w=1920,quality=90,fit=scale-down 1920w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ef0db7ab-5699-4f89-ab74-2a795a6d0d64/image/w=2048,quality=90,fit=scale-down 2048w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ef0db7ab-5699-4f89-ab74-2a795a6d0d64/image/w=3840,quality=90,fit=scale-down 3840w&quot; alt=&quot;Vault Agent 동작방식&quot; width=&quot;576&quot; height=&quot;265.0679156908665&quot; data-nimg=&quot;1&quot; /&gt;Vault Agent 동작방식&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380bca3f7d6f32309fcc9&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1112px; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; width: 1112px; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://miro.medium.com/v2/resize:fit:1400/format:webp/1*jmt8bsoEGeVHv5ZUP7XY_Q.gif&quot; alt=&quot;Vault - Kubernetes 연동시 동작흐름(출처: &quot; width=&quot;1000&quot; height=&quot;1000&quot; /&gt;Vault - Kubernetes 연동시 동작흐름(출처: 
&lt;div&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://medium.com/@muppedaanvesh/a-hand-on-guide-to-vault-in-kubernetes-%EF%B8%8F-1daf73f331bd&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Medium&lt;/a&gt;&lt;/div&gt;
)&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380269e4ada6a16a2f9ed&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380209ce7c9d162ee84ad&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;3.3. 실습&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c23804ba810cc43b65bb98b&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Step1. Vault AppRole 방식 인증 구성 - &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/auth/approle&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;AppRole 인증이란?&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23802dac83c5f23af0e878&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt;인증 구성 및 정책 적용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380a1ab9ec396f30180cc&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 1. AppRole 인증 방식 활성화
vault auth enable approle || echo &quot;AppRole already enabled&quot;

vault auth list
Path        Type       Accessor                 Description                Version
----        ----       --------                 -----------                -------
approle/    approle    auth_approle_45429d98    n/a                        n/a
token/      token      auth_token_0e40cfed      token based credentials    n/a

# 2. 정책 생성
vault policy write sampleapp-policy - &amp;lt;&amp;lt;EOF
path &quot;secret/data/sampleapp/*&quot; {
  capabilities = [&quot;read&quot;]
}
EOF

# 3. AppRole Role 생성
vault write auth/approle/role/sampleapp-role \
  token_policies=&quot;sampleapp-policy&quot; \
  secret_id_ttl=&quot;1h&quot; \
  token_ttl=&quot;1h&quot; \
  token_max_ttl=&quot;4h&quot;

# 4. Role ID 및 Secret ID 추출 및 저장
ROLE_ID=$(vault read -field=role_id auth/approle/role/sampleapp-role/role-id)
SECRET_ID=$(vault write -f -field=secret_id auth/approle/role/sampleapp-role/secret-id)

echo &quot;ROLE_ID: $ROLE_ID&quot;
echo &quot;SECRET_ID: $SECRET_ID&quot;

ROLE_ID: b49cb2f2-ff99-7e31-2bb7-a3c63ce7cd5d
SECRET_ID: 2b650c0b-d68a-6f5e-931b-dca81ae26684

# 5. 파일로 저장
mkdir -p approle-creds
echo &quot;$ROLE_ID&quot; &amp;gt; approle-creds/role_id.txt
echo &quot;$SECRET_ID&quot; &amp;gt; approle-creds/secret_id.txt


# 6. (옵션) Kubernetes Secret으로 저장
kubectl create secret generic vault-approle -n vault \
  --from-literal=role_id=&quot;${ROLE_ID}&quot; \
  --from-literal=secret_id=&quot;${SECRET_ID}&quot; \
  --save-config \
  --dry-run=client -o yaml | kubectl apply -f -&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238007864fcc62f6d3352e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Step2. Vault Agent Sidecar 연동&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c23807c9a17e7533f953af3&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault Agent는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;vault-agent-config.hcl&lt;/code&gt; 설정을 통해 연결할 Vault의 정보와, Template 구성, 렌더링 주기, 참조할 Vault KV 위치정보 등을 정의한다.&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c23804e9f97da569c9a3fa1&quot; class=&quot;notion-divider&quot; style=&quot;box-sizing: border-box; width: 1084px; margin: 8px 0px; border-bottom: var(--divider-border);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380eb8e95e05abffb186e&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1. Vault Agent 설정 파일 작성 및 생성 (&lt;/span&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vault-agent-config.hcl&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;)&lt;/span&gt; - HCL&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380428711ecf16319d4a1&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2. 샘플 애플리케이션 + Sidecar 배포(수동방식)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238074a86de74d8302249c&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3. SVC 생성&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380f29fe9efea6f57c481&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;4. 생성된 컨테이너 확인&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380d8b4d4ee95da4eade6&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;5. 실제 배포된 화면 확인&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238011a14df5736022a976&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;6. KV 값 변경 후 확인&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238029b8bae912ff045709&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; background-color: var(--color-bg-gray);&quot; class=&quot;highlighted-background bg-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(참고) Annotation을 활용한 Vault Sidecar Injection &lt;/span&gt;&lt;/span&gt;&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/injector/examples&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23809da62ccdf59ae010e0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c23801d8cede91f171d00e2&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;3.4. &lt;span style=&quot;box-sizing: border-box; background-color: var(--color-bg-yellow);&quot; class=&quot;highlighted-background bg-yellow&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &amp;nbsp;추가 학습자료&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c23809b9252c2f647d3fd1e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/tutorials/vault-agent/agent-kubernetes&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Retrieve secrets for Kubernetes workloads with Vault Agent&lt;/a&gt; - 실습&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23808fa947cf6e00f433b5&quot; class=&quot;notion-column-list&quot; style=&quot;box-sizing: border-box; display: flex; flex-wrap: wrap;&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380539240c3838cd1565d&quot; class=&quot;notion-column&quot; style=&quot;box-sizing: border-box; padding: 12px 0px; word-break: break-word; display: flex; flex-direction: column; width: calc((100% - var(--column-spacing) * 1) * 0.5);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b9bf83e1604dc1d31e&quot; class=&quot;notion-image align-center normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: center; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/9dbe71d9-e087-43ea-b5be-fc8ffbe7c172/image/w=3840,quality=90,fit=scale-down&quot; sizes=&quot;(max-width: 546px) 100vw, 50vw&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/9dbe71d9-e087-43ea-b5be-fc8ffbe7c172/image/w=384,quality=90,fit=scale-down 384w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/9dbe71d9-e087-43ea-b5be-fc8ffbe7c172/image/w=640,quality=90,fit=scale-down 640w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/9dbe71d9-e087-43ea-b5be-fc8ffbe7c172/image/w=750,quality=90,fit=scale-down 750w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/9dbe71d9-e087-43ea-b5be-fc8ffbe7c172/image/w=828,quality=90,fit=scale-down 828w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/9dbe71d9-e087-43ea-b5be-fc8ffbe7c172/image/w=1080,quality=90,fit=scale-down 1080w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/9dbe71d9-e087-43ea-b5be-fc8ffbe7c172/image/w=1200,quality=90,fit=scale-down 1200w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/9dbe71d9-e087-43ea-b5be-fc8ffbe7c172/image/w=1920,quality=90,fit=scale-down 1920w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/9dbe71d9-e087-43ea-b5be-fc8ffbe7c172/image/w=2048,quality=90,fit=scale-down 2048w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/9dbe71d9-e087-43ea-b5be-fc8ffbe7c172/image/w=3840,quality=90,fit=scale-down 3840w&quot; alt=&quot;image&quot; width=&quot;480&quot; height=&quot;370.9090909090909&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238005b2aac4d80ba96be6&quot; class=&quot;notion-column&quot; style=&quot;box-sizing: border-box; padding: 12px 0px; word-break: break-word; display: flex; flex-direction: column; width: calc((100% - var(--column-spacing) * 1) * 0.5); margin-inline-start: var(--column-spacing);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380aea122c150558941da&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 519px; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; width: 519px; object-fit: contain; border-radius: var(--image-border-radii); color: transparent; object-position: center center;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/54eb1645-eb13-4e21-9f79-6dc8440c8a9b/image/w=3840,quality=90,fit=scale-down&quot; sizes=&quot;(max-width: 546px) 100vw, 50vw&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/54eb1645-eb13-4e21-9f79-6dc8440c8a9b/image/w=384,quality=90,fit=scale-down 384w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/54eb1645-eb13-4e21-9f79-6dc8440c8a9b/image/w=640,quality=90,fit=scale-down 640w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/54eb1645-eb13-4e21-9f79-6dc8440c8a9b/image/w=750,quality=90,fit=scale-down 750w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/54eb1645-eb13-4e21-9f79-6dc8440c8a9b/image/w=828,quality=90,fit=scale-down 828w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/54eb1645-eb13-4e21-9f79-6dc8440c8a9b/image/w=1080,quality=90,fit=scale-down 1080w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/54eb1645-eb13-4e21-9f79-6dc8440c8a9b/image/w=1200,quality=90,fit=scale-down 1200w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/54eb1645-eb13-4e21-9f79-6dc8440c8a9b/image/w=1920,quality=90,fit=scale-down 1920w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/54eb1645-eb13-4e21-9f79-6dc8440c8a9b/image/w=2048,quality=90,fit=scale-down 2048w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/54eb1645-eb13-4e21-9f79-6dc8440c8a9b/image/w=3840,quality=90,fit=scale-down 3840w&quot; alt=&quot;image&quot; width=&quot;667.4739379882812&quot; height=&quot;491.24038548372226&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23809db013eb8ecfbf82ba&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/agent-and-proxy/proxy&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;What is Vault Proxy?&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c23800fb4d8c2633df63b97&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault Proxy는 애플리케이션이 Vault와 통합하는 초기 진입 장벽을 낮추고, 더 확장 가능하고 단순한 방식을 제공하기 위해 만들어졌습니다. Vault Proxy는 Vault의 API 프록시 역할을 하며, 클라이언트가 자동 인증된 토큰을 사용하도록 허용하거나 강제할 수 있습니다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380469f30d7b5df97dda0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault Proxy는 클라이언트 데몬으로 다음과 같은 기능을 제공합니다:&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380a694f5dcce8b44ef46&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Auto-Auth&lt;/span&gt;: Vault에 자동으로 인증하고, 로컬에서 가져온 동적 비밀의 토큰 갱신 프로세스를 관리합니다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23806798bbc2e777ae6f97&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;API Proxy&lt;/span&gt;: Vault의 API에 대한 프록시 역할을 하며, Auto-Auth 토큰을 선택적으로 또는 강제로 사용하게 할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380498520f6cba6a8f358&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;캐싱(Caching)&lt;/span&gt;: 새로 생성된 토큰이나 이 토큰으로부터 생성된 리스 비밀(leased secrets)에 대한 응답을 클라이언트 측에서 캐싱할 수 있도록 합니다. 또한, 에이전트는 캐시된 토큰과 리스의 갱신도 관리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380fd9642f20e453cfebb&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/tutorials/vault-agent/agent-quick-start&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Vault Agent and Vault Proxy quick start&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380fd997ce340d249d9ed&quot; class=&quot;notion-column-list&quot; style=&quot;box-sizing: border-box; display: flex; flex-wrap: wrap;&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c238083ab6bfb99d5630a80&quot; class=&quot;notion-column&quot; style=&quot;box-sizing: border-box; padding: 12px 0px; word-break: break-word; display: flex; flex-direction: column; width: calc((100% - var(--column-spacing) * 1) * 0.5);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23806f9470c552f41995d3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/tutorials/vault-agent/agent-quick-start#what-is-vault-agent&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Vault Agent &lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b9b29fd1d56f97c9cc&quot; class=&quot;notion-column&quot; style=&quot;box-sizing: border-box; padding: 12px 0px; word-break: break-word; display: flex; flex-direction: column; width: calc((100% - var(--column-spacing) * 1) * 0.5); margin-inline-start: var(--column-spacing);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380cca7ecd1c218718836&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/tutorials/vault-agent/agent-quick-start#vault-proxy&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Vault Proxy&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380f4a090e09e9789f133&quot; class=&quot;notion-column-list&quot; style=&quot;box-sizing: border-box; display: flex; flex-wrap: wrap;&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23805b8f37e524bb3f308c&quot; class=&quot;notion-column&quot; style=&quot;box-sizing: border-box; padding: 12px 0px; word-break: break-word; display: flex; flex-direction: column; width: calc((100% - var(--column-spacing) * 1) * 0.5);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23806ba017df3eb28008d7&quot; class=&quot;notion-image align-center normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: center; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/bfcb20a4-3fb7-47ee-bf90-9682951c0e26/image/w=3840,quality=90,fit=scale-down&quot; sizes=&quot;(max-width: 546px) 100vw, 50vw&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/bfcb20a4-3fb7-47ee-bf90-9682951c0e26/image/w=384,quality=90,fit=scale-down 384w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/bfcb20a4-3fb7-47ee-bf90-9682951c0e26/image/w=640,quality=90,fit=scale-down 640w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/bfcb20a4-3fb7-47ee-bf90-9682951c0e26/image/w=750,quality=90,fit=scale-down 750w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/bfcb20a4-3fb7-47ee-bf90-9682951c0e26/image/w=828,quality=90,fit=scale-down 828w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/bfcb20a4-3fb7-47ee-bf90-9682951c0e26/image/w=1080,quality=90,fit=scale-down 1080w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/bfcb20a4-3fb7-47ee-bf90-9682951c0e26/image/w=1200,quality=90,fit=scale-down 1200w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/bfcb20a4-3fb7-47ee-bf90-9682951c0e26/image/w=1920,quality=90,fit=scale-down 1920w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/bfcb20a4-3fb7-47ee-bf90-9682951c0e26/image/w=2048,quality=90,fit=scale-down 2048w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/bfcb20a4-3fb7-47ee-bf90-9682951c0e26/image/w=3840,quality=90,fit=scale-down 3840w&quot; alt=&quot;image&quot; width=&quot;480&quot; height=&quot;270&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23805ea80fe2e3588a0fa7&quot; class=&quot;notion-column&quot; style=&quot;box-sizing: border-box; padding: 12px 0px; word-break: break-word; display: flex; flex-direction: column; width: calc((100% - var(--column-spacing) * 1) * 0.5); margin-inline-start: var(--column-spacing);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23808aba44d043c5edd55c&quot; class=&quot;notion-image align-center normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: center; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/15e03049-d235-4e06-9c53-87e7233946d5/image/w=3840,quality=90,fit=scale-down&quot; sizes=&quot;(max-width: 546px) 100vw, 50vw&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/15e03049-d235-4e06-9c53-87e7233946d5/image/w=384,quality=90,fit=scale-down 384w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/15e03049-d235-4e06-9c53-87e7233946d5/image/w=640,quality=90,fit=scale-down 640w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/15e03049-d235-4e06-9c53-87e7233946d5/image/w=750,quality=90,fit=scale-down 750w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/15e03049-d235-4e06-9c53-87e7233946d5/image/w=828,quality=90,fit=scale-down 828w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/15e03049-d235-4e06-9c53-87e7233946d5/image/w=1080,quality=90,fit=scale-down 1080w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/15e03049-d235-4e06-9c53-87e7233946d5/image/w=1200,quality=90,fit=scale-down 1200w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/15e03049-d235-4e06-9c53-87e7233946d5/image/w=1920,quality=90,fit=scale-down 1920w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/15e03049-d235-4e06-9c53-87e7233946d5/image/w=2048,quality=90,fit=scale-down 2048w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/15e03049-d235-4e06-9c53-87e7233946d5/image/w=3840,quality=90,fit=scale-down 3840w&quot; alt=&quot;image&quot; width=&quot;480&quot; height=&quot;270&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;notion-table__wrapper&quot; style=&quot;box-sizing: border-box; overflow-x: auto;&quot;&gt;
&lt;table class=&quot;notion-table col-header&quot; style=&quot;margin: 8px 0px 18px; border-collapse: collapse;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;
&lt;tr style=&quot;box-sizing: border-box; background-color: var(--color-bg-gray); color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px; background: var(--color-color-default);&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;Capability&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px; background: var(--color-color-default);&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;Vault Agent&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px; background: var(--color-color-default);&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;Vault Proxy&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;Auto-auth&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;✅&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;✅&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;Caching&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;✅&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;✅&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;Templating&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;✅&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;❌&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;API proxy&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;Will be deprecated&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;✅&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;Run as a&amp;nbsp;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/agent-and-proxy/agent/winsvc&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Windows Service&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;✅&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;❌&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/agent-and-proxy/agent/process-supervisor&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Process Supervisor&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;✅&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 207.173px; max-width: 207.173px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;❌&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380ef8f79d353f1a5778c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380a4bda1f34367f23d6f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;4&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238075863be9e7acabb16f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Jenkins + Vault(AppRole) - CI&lt;/li&gt;
&lt;/ol&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238006967dc6525396bd47&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Vault KV Store에 저장한 username, password을 Jenkins을 활용해서 획득하는 방안&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380bbab25f04d40064131&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;CI 파이프라인에서 정적(Static) 시크릿을 외부에 저장하고 관리할 경우 사용할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c238036a5b3d8267737f410&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380a9b5b2e9739be95e24&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;4.1. &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-background bg-yellow&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &amp;nbsp;CI/CD 보안 고려사항&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c238045adb7c8f47f09c066&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/773ce42e-51e4-4cd1-8e22-504c84fc3fdd/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-8045-adb7-c8f47f09c066&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744473600000&amp;amp;signature=pQ3qTbwajTs4c1jnJOl2NZ-zTh5m7JEueJX8PDHoJLw&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;505.1632047477745&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380e1908cff247c2bc9cb&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://developer.hashicorp.com/well-architected-framework/security/security-cicd-vault#anti-patterns&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;CI/CD 안티패턴&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380d2bea0f5bb2638c7e8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/auth/approle/approle-pattern#security-considerations&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;AppRole 인증 - 보안 고려사항&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380c28b02f6b88f7aa47f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://developer.hashicorp.com/well-architected-framework/security/security-cicd-vault#hard-coded-secrets&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Hard-coded secrets&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23808ca817c2a6534bcedb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://developer.hashicorp.com/well-architected-framework/security/security-cicd-vault#hard-coded-vault-authentication&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Hard-coded Vault authentication&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d3b8b2c1c238041b923d1d2b3177ddb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/auth/approle/approle-pattern#anti-patterns&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;AppRole 인증 - Anti Pattern&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380db8362c1e10cf4f353&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;최근 CI/CD의 공격사례(&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://www.cve.org/CVERecord?id=CVE-2025-30066&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;CVE-2025-30066&lt;/a&gt;) : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;GitHub Action &lt;/span&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;tj-actions/changed-files&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 공격&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c238001ac21dbf623ecf90d&quot; class=&quot;notion-embed&quot; style=&quot;box-sizing: border-box; width: 1102px; align-self: center;&quot;&gt;
&lt;div class=&quot;notion-embed__content&quot; style=&quot;box-sizing: border-box; display: flex; position: relative;&quot;&gt;
&lt;div class=&quot;notion-embed__container__wrapper align-start&quot; style=&quot;box-sizing: border-box; width: 1102px; display: flex; justify-content: start; height: 320px;&quot;&gt;
&lt;div class=&quot;notion-embed__container&quot; style=&quot;box-sizing: border-box; position: absolute; max-width: 100%; height: 320px; min-height: 100px; margin: 0px auto; width: 1102px;&quot;&gt;&lt;iframe src=&quot;https://news.hada.io/topic?id=19770&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23809f9d1eeade9c541f3d&quot; class=&quot;notion-bookmark&quot; style=&quot;box-sizing: border-box; margin: 4px 0px; border-radius: var(--bookmark-border-radii); border: var(--bookmark-border); transition: background 0.12s ease-in;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit; display: flex;&quot; href=&quot;https://www.wiz.io/blog/github-action-tj-actions-changed-files-supply-chain-attack-cve-2025-30066&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
&lt;div class=&quot;notion-bookmark__content&quot; style=&quot;box-sizing: border-box; overflow: hidden; flex: 4 1 180px; padding: var(--bookmark-padding);&quot;&gt;
&lt;h5 class=&quot;notion-bookmark__title&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 2px; line-height: 1.25rem; font-size: 0.875rem; text-wrap-mode: nowrap; overflow: hidden; text-overflow: ellipsis;&quot;&gt;GitHub Action tj-actions/changed-files supply chain attack | Wiz Blog&lt;/h5&gt;
&lt;p class=&quot;notion-bookmark__description&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-size: 0.75rem; line-height: 1rem; opacity: 0.6; height: 2rem; overflow: hidden;&quot; data-ke-size=&quot;size16&quot;&gt;A supply chain attack on GitHub Action tj-actions/changed-files caused many repositories to leak their secrets.&lt;/p&gt;
&lt;div class=&quot;notion-bookmark__link&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; margin-top: 6px;&quot;&gt;
&lt;div style=&quot;box-sizing: border-box; margin-inline-end: 6px; display: flex;&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: contain; object-position: center center;&quot; src=&quot;https://www.wiz.io/favicon.png&quot; width=&quot;16&quot; height=&quot;16&quot; /&gt;&lt;/div&gt;
&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-size: 0.75rem; line-height: 1rem; text-wrap-mode: nowrap; overflow: hidden; text-overflow: ellipsis;&quot; data-ke-size=&quot;size16&quot;&gt;www.wiz.io&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;notion-bookmark__cover&quot; style=&quot;box-sizing: border-box; flex: 1 1 180px; position: relative; width: 500px; height: 6.75rem;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; display: block; object-fit: cover; border-radius: var(--bookmark-image-border-radii); width: 328px; height: 108px;&quot; src=&quot;https://www.datocms-assets.com/75231/1742054564-report-2x.png?fm=webp&quot; alt=&quot;GitHub Action tj-actions/changed-files supply chain attack | Wiz Blog&quot; width=&quot;250&quot; height=&quot;108&quot; /&gt;&lt;/div&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380d0914dd41a2c1c0595&quot; class=&quot;notion-bookmark&quot; style=&quot;box-sizing: border-box; margin: 4px 0px; border-radius: var(--bookmark-border-radii); border: var(--bookmark-border); transition: background 0.12s ease-in;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit; display: flex;&quot; href=&quot;https://sysdig.com/blog/detecting-and-mitigating-the-tj-actions-changed-files-supply-chain-attack-cve-2025-30066/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
&lt;div class=&quot;notion-bookmark__content&quot; style=&quot;box-sizing: border-box; overflow: hidden; flex: 4 1 180px; padding: var(--bookmark-padding);&quot;&gt;
&lt;h5 class=&quot;notion-bookmark__title&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 2px; line-height: 1.25rem; font-size: 0.875rem; text-wrap-mode: nowrap; overflow: hidden; text-overflow: ellipsis;&quot;&gt;Detecting and Mitigating the &amp;ldquo;tj-actions/changed-files&amp;rdquo; Supply Chain Attack (CVE-2025-30066)&lt;/h5&gt;
&lt;p class=&quot;notion-bookmark__description&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-size: 0.75rem; line-height: 1rem; opacity: 0.6; height: 2rem; overflow: hidden;&quot; data-ke-size=&quot;size16&quot;&gt;On March 14, 2025, StepSecurity uncovered a compromise in the popular GitHub Action tj-actions/changed-files. Tens of thousands of repositories use this&lt;/p&gt;
&lt;div class=&quot;notion-bookmark__link&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; margin-top: 6px;&quot;&gt;
&lt;div style=&quot;box-sizing: border-box; margin-inline-end: 6px; display: flex;&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: contain; object-position: center center;&quot; src=&quot;https://sysdig.com/wp-content/uploads/favicon-350x350.png&quot; width=&quot;16&quot; height=&quot;16&quot; /&gt;&lt;/div&gt;
&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-size: 0.75rem; line-height: 1rem; text-wrap-mode: nowrap; overflow: hidden; text-overflow: ellipsis;&quot; data-ke-size=&quot;size16&quot;&gt;sysdig.com&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;notion-bookmark__cover&quot; style=&quot;box-sizing: border-box; flex: 1 1 180px; position: relative; width: 500px; height: 6.75rem;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; display: block; object-fit: cover; border-radius: var(--bookmark-image-border-radii); width: 328px; height: 108px; color: transparent;&quot; src=&quot;https://10--k8s--.super.site/_next/image?url=https%3A%2F%2Fassets.super.so%2F0ab8fb47-8432-4782-a7bb-76734677af26%2Fimages%2F29f2fc56-37c6-4585-a26a-310552cc2f3a%2FFast-track-CVE-announcement-4-1-1.png&amp;amp;w=640&amp;amp;q=90&quot; srcset=&quot;/_next/image?url=https%3A%2F%2Fassets.super.so%2F0ab8fb47-8432-4782-a7bb-76734677af26%2Fimages%2F29f2fc56-37c6-4585-a26a-310552cc2f3a%2FFast-track-CVE-announcement-4-1-1.png&amp;amp;w=256&amp;amp;q=90 1x, /_next/image?url=https%3A%2F%2Fassets.super.so%2F0ab8fb47-8432-4782-a7bb-76734677af26%2Fimages%2F29f2fc56-37c6-4585-a26a-310552cc2f3a%2FFast-track-CVE-announcement-4-1-1.png&amp;amp;w=640&amp;amp;q=90 2x&quot; alt=&quot;Detecting and Mitigating the &amp;ldquo;tj-actions/changed-files&amp;rdquo; Supply Chain Attack (CVE-2025-30066)&quot; width=&quot;250&quot; height=&quot;108&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380ebbcd7fdadbbcf3582&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-size: 0.9rem; line-height: 1.5; overflow-wrap: normal; direction: ltr;&quot;&gt;  HashiCorp Vault을 활용해서 해결하는 방안은&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;?&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380c7ba6fe7f476e4c931&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c238045b843fa4ac82447bb&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;4.2. &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Vault - Jenkins Plugin with AppRole 인증방식 워크플로우&lt;/code&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/auth/approle/approle-pattern#jenkins-ci-cd&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380179fb2d9999ede1f68&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/ef8cf572-78d4-4c2f-9b8d-b576fc2b87dd/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-8017-9fb2-d9999ede1f68&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744473600000&amp;amp;signature=nQVKRisSh_wjFrHrA5J65TthvUDkJ994TbeoxETGksA&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;455.06179066834807&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380578437e94808ae7b1a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/auth/approle/approle-pattern#usage-workflow&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;공식문서&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 요약(ChatGPT)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380d5b685f151e370e085&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;젠킨스는 Vault에 시크릿으로 분류된 데이터를 필요로 하는 작업(job)을 실행해야 합니다. 젠킨스는 마스터 노드와 워커 노드를 가지고 있으며, 워커 노드는 짧은 시간 동안 실행되는 컨테이너 러너에서 작업을 실행합니다.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380728758c4497f145e05&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;프로세스는 다음과 같습니다:&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238009b90afe2f4ba221a7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;젠킨스 워커가 Vault에 인증&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380529291ce156cf2e446&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Vault는 토큰을 반환&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380e2a39fe4d526392590&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;워커는 이 토큰을 사용해 작업에 해당하는 역할의 Wrapped SecretID를 요청&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380f592eafd772ccd4e5f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Vault는 Wrapped SecretID를 반환&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380d79b6af131de17407c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;워커는 작업 러너를 생성하고, Wrapped SecretID를 변수로 전달&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380aebd4df7619093907f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;러너 컨테이너는 Wrapped SecretID의 unwrap을 요청&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238005b36eea473e67636e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Vault는 SecretID를 반환&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238054a4f9d8c47790c714&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;러너는 RoleID와 SecretID를 사용해 Vault에 인증&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238063b19bf3c589caea60&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Vault는 필요한 시크릿 정보를 읽을 수 있는 정책이 포함된 토큰을 반환&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238048911ad9c3aab36325&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;러너는 이 토큰을 사용해 Vault에서 시크릿을 가져옴&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380adbae0c5577f79f206&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380e99040de859a23fb72&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;4.3. 실습&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380ba9eb1c05918c2b9f4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step1. Jenkins에서 Vault Plugin 설치&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380569f6bf6877c57bda9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Jenkins UI 접속&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238032a120f9024adaedd7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;상단 메뉴에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Manage Jenkins&lt;/span&gt; &amp;rarr; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Plugins&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23808ca96fc3567a7a98ee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Available 탭&lt;/span&gt;에서 Vault 검색&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380fcb15fdf7b75159568&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HashiCorp Vault Plugin&lt;/span&gt; 설치 후 Jenkins 재시작&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d3b8b2c1c23808dbc17c87a248f7174&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1078px; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; width: 1078px; object-fit: contain; border-radius: var(--image-border-radii); object-position: center center;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/c88126c7-c7db-469f-8f10-a75cd7783aa8/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-808d-bc17-c87a248f7174&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744473600000&amp;amp;signature=slZpktZq7PkPdOtikE1O2qVkJK74aDzgKlz0gLElN3E&quot; alt=&quot;image&quot; width=&quot;654.00244140625&quot; height=&quot;208.35194509780823&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23804c8c51d227db4335e8&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step2. Vault AppRole 정보 확인 &lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rArr; Secret ID는 1시간 만료이므로, 그냥 다시 생성해서, 해당 값을 젠킨스에 설정하고 빌드 실습 하자.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238005bac0e52605ab5970&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Vault에서 발급된 ROLE_ID, SECRET_ID는 이전에 생성한 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;role_id.txt&lt;/code&gt; &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;secret_id.txt&lt;/code&gt; 값을 참고하여 사용할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b8ad7fe862fee243bf&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-size: 0.9rem; line-height: 1.5; overflow-wrap: normal; direction: ltr;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;# Role ID 확인 및 Secret ID 신규 발급&lt;/span&gt;
&lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token assign-left variable&quot;&gt;ROLE_ID&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token variable&quot;&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token variable&quot;&gt;$(&lt;/span&gt;vault &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token builtin class-name&quot;&gt;read&lt;/span&gt; -field&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token operator&quot;&gt;=&lt;/span&gt;role_id auth/approle/role/sampleapp-role/role-id&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token assign-left variable&quot;&gt;SECRET_ID&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token variable&quot;&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token variable&quot;&gt;$(&lt;/span&gt;vault &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token function&quot;&gt;write&lt;/span&gt; -f -field&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token operator&quot;&gt;=&lt;/span&gt;secret_id auth/approle/role/sampleapp-role/secret-id&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;&quot;ROLE_ID: &lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token variable&quot;&gt;$ROLE_ID&lt;/span&gt;&quot;&lt;/span&gt;
&lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;&quot;SECRET_ID: &lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token variable&quot;&gt;$SECRET_ID&lt;/span&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380798021dcf2d8b2c09a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(참고) Role ID, Secret ID 획득방안&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23803a9577d5d6930074d6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-size: 0.9rem; line-height: 1.5; overflow-wrap: normal; direction: ltr;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;# Role ID&lt;/span&gt;
vault &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token builtin class-name&quot;&gt;read&lt;/span&gt; auth/approle/role/&lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;role-name&lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;/role-id

&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;# Secret ID&lt;/span&gt;
vault &lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token function&quot;&gt;write&lt;/span&gt; -f auth/approle/role/&lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;role-name&lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;/secret-id

&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;# 예시&lt;/span&gt;
vault &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token builtin class-name&quot;&gt;read&lt;/span&gt; auth/approle/role/sampleapp-role/role-id
Key        Value
---        -----
role_id    678c0c6e-57df-bb23-1427-f6318843a514&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238013aa95cff1eed5093e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380fe8411de4b8fafe410&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step3. Jenkins에서 Vault 설정 및 Credentials 추가&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238084b18de174e62ed4d5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Jenkins UI(&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;admi/qwe123&lt;/code&gt;) &amp;rarr; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Manage Jenkins&lt;/span&gt; &amp;rarr; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Configure System&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380bab903e8200b6c7809&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1078px; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; width: 1078px; object-fit: contain; border-radius: var(--image-border-radii); object-position: center center;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/0f991e69-0731-4378-a5cb-9773920c58c9/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-80ba-b903-e8200b6c7809&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744473600000&amp;amp;signature=eB-VsQ3tD2qbBma1QHi0wmsAQUAJx4CM-NduBBFXpjk&quot; alt=&quot;image&quot; width=&quot;4112&quot; height=&quot;2396&quot; /&gt;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380209115d9e9ce86e388&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;스크롤 하단의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Vault Plugin Configuration&lt;/span&gt; 섹션으로 이동&lt;/li&gt;
&lt;/ol&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23800baf1ff7b9de4517c6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Vault URL 입력 후 [Add] 버튼 클릭 : IP입력할것!&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c238054979ff0c2734348df&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/95acb404-950e-4884-9173-c5b2f41c8313/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-8054-979f-f0c2734348df&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744473600000&amp;amp;signature=T0V0dhFBPw7_kg81iSU-3nkTARwJkAgTMk-e3jCkt6g&quot; alt=&quot;image&quot; width=&quot;480&quot; height=&quot;308.7256371814093&quot; /&gt;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23802ebc44cf73454633d4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Vault Credential &lt;/span&gt;다음 값 입력:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23804399c6d8891a39432d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;종류: &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Vault AppRole Credential&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23800bbabbc6e7609686b7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Role ID &amp;amp; Secret ID 입력 &amp;rarr; 생성해놓은 변수 또는 파일참고&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238052a001c7e49cfc8829&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;ID는 기억하기 쉬운 이름으로 지정 (&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;vault-approle-creds&lt;/code&gt; 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380788121e77b2ed98357&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1050px; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; width: 1050px; object-fit: contain; border-radius: var(--image-border-radii); object-position: center center;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/b3a47bdf-fd3c-40a0-9de7-c84cac251fea/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-8078-8121-e77b2ed98357&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744473600000&amp;amp;signature=ysI9UP_YA_Erg51ECcT_7Vh55g13R5vMrHSbEh-HMY0&quot; alt=&quot;image&quot; width=&quot;3038&quot; height=&quot;1868&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23807e824be747c5737864&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step4. Jenkins Pipeline Job 생성&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380ce9e09fa8287c59b87&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Jenkins UI &amp;rarr; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;New Item&lt;/span&gt; &amp;rarr; Pipeline 선택&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380578a9df023dc770251&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;jenkins-vault-kv&lt;/code&gt; 입력 후 생성&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23803b8b53fd085702b00d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Jenkinsfile 작성&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b2b55afe730f7b5086&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Jenkinsfile 예시&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23809a90aae3fa2be6b038&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-groovy&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-groovy&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-size: 0.9rem; line-height: 1.5; overflow-wrap: normal; direction: ltr;&quot;&gt;pipeline &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  agent any

  environment &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    VAULT_ADDR &lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;'http://192.168.0.10:30000'&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;// 실제 Vault 주소로 변경!!!&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  stages &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token function&quot;&gt;stage&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;'Read Vault Secret'&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      steps &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token function&quot;&gt;withVault&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
          vaultSecrets&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
            &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
              path&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;'secret/sampleapp/config'&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;// version2는 data path가 없음!!&lt;/span&gt;
              engineVersion&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
              secretValues&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
                &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;envVar&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;'USERNAME'&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; vaultKey&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;'username'&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;envVar&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;'PASSWORD'&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; vaultKey&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;'password'&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
              &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
            &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
          &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          configuration&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
            vaultUrl&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string gstring&quot;&gt;&quot;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token expression&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #383942;&quot; class=&quot;token punctuation&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #383942;&quot; class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;VAULT_ADDR&lt;span style=&quot;box-sizing: border-box; color: #383942;&quot; class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            vaultCredentialId&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;'vault-approle-creds'&lt;/span&gt;
          &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
        &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          sh &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;'''
            echo &quot;Username from Vault: $USERNAME&quot;
            echo &quot;Password from Vault: $PASSWORD&quot;
          '''&lt;/span&gt;
          script &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            echo &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string gstring&quot;&gt;&quot;Username (env): &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token expression&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #383942;&quot; class=&quot;token punctuation&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #383942;&quot; class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;env&lt;span style=&quot;box-sizing: border-box; color: #383942;&quot; class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;USERNAME&lt;span style=&quot;box-sizing: border-box; color: #383942;&quot; class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt;
            echo &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string gstring&quot;&gt;&quot;Password (env): &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token expression&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #383942;&quot; class=&quot;token punctuation&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #383942;&quot; class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;env&lt;span style=&quot;box-sizing: border-box; color: #383942;&quot; class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;PASSWORD&lt;span style=&quot;box-sizing: border-box; color: #383942;&quot; class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt;
          &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380e7b1c5d95206c8196b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Jenkins 실행결과 &amp;rarr; 보안상 취약하므로 마스킹처리됨. &lt;del style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;우회방안은 있음(파일로 저장)&lt;/span&gt;&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380c2ab04d3e16177c096&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/2bdcee6f-a778-4c38-88fc-2b2ff6a55e88/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-80c2-ab04-d3e16177c096&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744473600000&amp;amp;signature=M3LtQyP3tfnaOaqSlyZ_MqJuCjYqwN2lEcYYoRjyRL8&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;688.9875000000001&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23809c9129cc20e8e39b5e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-background bg-yellow&quot;&gt;유의사항&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23809488ccd2c351b64d5c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;KV Version1은 경로에 data을 넣고 Version2는 경로에 data을 넣지 않습니다! - &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://docmoa.github.io/04-HashiCorp/06-Vault/04-UseCase/jenkins-with-vault.html#v1-pipe-line&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;참고링크&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380cb94a6c6d92f4cd0db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Version 1 : &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;secret/data/sampleapp/config&lt;/code&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238078bcf0f7fa02c3a9ba&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Version 2 : &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;secret/sampleapp/config&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d3b8b2c1c23802d92d1c4721ef6636f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;sh 블록 vs script 블록&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div class=&quot;notion-table__wrapper&quot; style=&quot;box-sizing: border-box; overflow-x: auto;&quot;&gt;
&lt;table class=&quot;notion-table col-header&quot; style=&quot;margin: 8px 0px 18px; border-collapse: collapse;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 290.023px; max-width: 290.023px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;상황&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 290.023px; max-width: 290.023px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;사용 방식&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 290.023px; max-width: 290.023px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;sh 블록&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 290.023px; max-width: 290.023px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;$USERNAME, $PASSWORD&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot;&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 290.023px; max-width: 290.023px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;script 블록&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;box-sizing: border-box; vertical-align: top; border: 1px solid var(--color-border-dark); min-width: 290.023px; max-width: 290.023px;&quot;&gt;
&lt;div class=&quot;notion-table__cell&quot; style=&quot;box-sizing: border-box; padding: 7px 9px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;${env.USERNAME}, ${env.PASSWORD}&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b190d0e694ad4a36bb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;5&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;5&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238091852cdc9477763f19&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;ArgoCD + Vault Plugin (Kubernetes Auth/AppRole) - CD&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1d3b8b2c1c238094920ed486395c370b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;  Vault + ArgoCD Plugin 패턴 - &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://docmoa.github.io/04-HashiCorp/06-Vault/04-UseCase/argocd-vault-plugin.html#_3-%E1%84%89%E1%85%A2%E1%86%B7%E1%84%91%E1%85%B3%E1%86%AF-%E1%84%8B%E1%85%A2%E1%86%B8-%E1%84%87%E1%85%A2%E1%84%91%E1%85%A9&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크1&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://colinwilson.uk/2022/03/27/secret-management-with-gitops-and-argo-cd-vault-plugin/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크2&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c23804781dac02a67a431b7&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;ArgoCD Vault Plugin 소개&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23803c89d9e797c74b5781&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Argo CD에는 다양한 시크릿 관리 도구(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HashiCorp Vault&lt;/span&gt;, IBM Cloud Secrets Manager, AWS Secrets Manager 등)플러그인을 통해 Kubernetes 리소스에 주입할 수 있도록 지원합니다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238013b2f7e33f83fc32e8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;플러그인을 통해 Operator 또는 CRD(Custom Resource Definition)에 의존하지 않고 GitOps와 Argo CD로 시크릿 관리 문제를 해결할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238031bc53f385b014a274&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;특히 Secret 뿐만 아니라, deployment, configMap 또는 기타 Kubernetes 리소스에도 사용할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380228212f8e6a3014204&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380fbb22bfff46a90f32e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;설치/구성관련 내용 요약(ChatGPT) - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://argocd-vault-plugin.readthedocs.io/en/stable/installation/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c238050a26bcaf42912d8db&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Argo CD Vault Plugin의 공식 문서에서는 Argo CD에 플러그인을 설치하는 방법으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;네 가지&lt;/u&gt;&lt;/span&gt;를 제시하고 있습니다:&lt;/p&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380a78439c44bcc47bc99&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;argocd-cm ConfigMap을 통한 설치&lt;/span&gt;:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23802e975ee458a4d2d4e7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;argocd-repo-server에 InitContainer를 추가하여 플러그인을 다운로드하고 설정합니다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23800a9d5dcafc44d2e55b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;또는 플러그인이 사전 설치된 커스텀 이미지를 생성하여 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380fe9d32facd23e4d878&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;사이드카 컨테이너를 통한 설치&lt;/span&gt;:&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23801a8ee2d21cdf414721&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;사이드카 컨테이너를 추가하여 플러그인과 필요한 도구들을 포함시킵니다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380c4b51efb99fbd2176c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;또는 플러그인이 사전 설치된 커스텀 사이드카 이미지를 생성하여 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-1d3b8b2c1c238092b73efefa5a67d7ee&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;이 중 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;사이드카 컨테이너를 활용한 방법은 Argo CD v2.4.0부터 도입된 최신 방식으로, 보안성과 유지보수 측면에서 권장&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380e2bcb7de5cf0604e85&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380abb5e6fb843d44cd60&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;5.1. 실습&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c238051ac34e2b77fdd7ab6&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step 1. ArgoCD Vault Plugin을 위한 Credentials 활성화 - AppRole 인증&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238024ba7cfb009688134f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;이전 실습에서 획득한 Role_ID, Secret_ID활용&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c23806a9709f7ec2bcb44be&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-size: 0.9rem; line-height: 1.5; overflow-wrap: normal; direction: ltr;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;&quot;ROLE_ID: &lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token variable&quot;&gt;$ROLE_ID&lt;/span&gt;&quot;&lt;/span&gt;
&lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;&quot;SECRET_ID: &lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token variable&quot;&gt;$SECRET_ID&lt;/span&gt;&quot;&lt;/span&gt;

kubectl apply -f - &lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;EOF
kind: Secret
apiVersion: v1
metadata:
  name: argocd-vault-plugin-credentials
  namespace: argocd
type: Opaque
stringData:
  VAULT_ADDR: &quot;http://vault.vault:8200&quot;
  AVP_TYPE: &quot;vault&quot;
  AVP_AUTH_TYPE: &quot;approle&quot;
  AVP_ROLE_ID: b49cb2f2-ff99-7e31-2bb7-a3c63ce7cd5d #Role_ID
  AVP_SECRET_ID: 1114778c-014d-b61f-5afd-d137a1a48484 #Secret_ID
EOF&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380fd8354cd7d3e23353e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step 2. &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-background bg-gray&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; color: inherit; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ArgoCD Vault Plugin 설치&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;- &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://jineey.tistory.com/entry/ArgoCD-argocd-v28%EC%9D%B4%EC%83%81-%EC%82%AC%EC%9D%B4%EB%93%9C%EC%B9%B4%EB%A1%9C-Vault-Plugin-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Blog&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b785a2d8527b6786a4&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;참고사항&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238086a5eaf0c962eefd0f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ArgoCD Helm 설치시 Plugin 활성화 방안 &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380da8f46cc65bbd15c78&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-size: 0.9rem; line-height: 1.5; overflow-wrap: normal; direction: ltr;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token function&quot;&gt;git&lt;/span&gt; clone https://github.com/hyungwook0221/argocd-vault-plugin.git
&lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; argocd-vault-plugin/manifests/cmp-sidecar

&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;# 예전 문법으로 적용된 부분을 edit fix 명령으로 현행화&lt;/span&gt;
&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;# kustomize edit fix&lt;/span&gt;

&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;# argocd 네임스페이스 설정&lt;/span&gt;
kubens argocd

&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;# 생성될 메니페스트 파일에 대한 확인&lt;/span&gt;
kubectl kustomize &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt;

&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;# -k 옵션으로 kusomize 실행&lt;/span&gt;
kubectl apply -n argocd -k &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238096ae43e3653c9e9f89&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b1a3eecb3fa10f279f&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-size: 0.9rem; line-height: 1.5; overflow-wrap: normal; direction: ltr;&quot;&gt;k &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token builtin class-name&quot;&gt;exec&lt;/span&gt; -it -n vault vault-0 -- &lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token function&quot;&gt;sh&lt;/span&gt;

&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;# vault pod shell에 접속 후 root token으로 로그인&lt;/span&gt;
vault login
Token &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;will be hidden&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;: &lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;토큰입력&lt;span style=&quot;box-sizing: border-box; color: #4078f1;&quot; class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
    
&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;# 확인명령&lt;/span&gt;
vault &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token builtin class-name&quot;&gt;read&lt;/span&gt; auth/kubernetes/role/argocd&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380fc8b9bc417038a628c&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23800ca565e8b8fdfafeba&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step 3. 샘플 Application 배포하여 Vault와 동기화&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23801ca8fdc9013c94b053&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;(참고) &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;luafanti/spring-boot-debug-app:main&lt;/code&gt; 이미지는 amd64 CPU만 가능 (arm CPU는 기동 실패) - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://hub.docker.com/r/luafanti/spring-boot-debug-app/tags&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380648591e8895357dd65&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step 3-1) &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Application.yaml&lt;/code&gt; 작성&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380d7a457cf1b715f403f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;GitHub에 저장된 Helm Repo을 배포하며, Helm 메니페스트 내에 변수로 치환된 값(username/password)을 CD 단계에서 Vault 통해서 읽고 렌더링하여 배포&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c23803a9533ca263503af65&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-size: 0.9rem; line-height: 1.5; overflow-wrap: normal; direction: ltr;&quot;&gt;kubectl apply &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;n argocd &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;f &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &amp;lt;&amp;lt;EOF
&lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;apiVersion&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; argoproj.io/v1alpha1
&lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;kind&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Application
&lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; demo
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; argocd
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;finalizers&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; resources&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;finalizer.argocd.argoproj.io
&lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;spec&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;destination&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; argocd
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; https&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;//kubernetes.default.svc
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;project&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; default
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; infra/helm
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;repoURL&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; https&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;//github.com/hyungwook0221/spring&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;boot&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;debug&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;app
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;targetRevision&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; main
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;plugin&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; argocd&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;vault&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;plugin&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;helm
      &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;env&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; HELM_ARGS
          &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;f new&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;values.yaml
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;syncPolicy&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;automated&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;prune&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #e35549;&quot; class=&quot;token boolean important&quot;&gt;true&lt;/span&gt;
      &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;selfHeal&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #e35549;&quot; class=&quot;token boolean important&quot;&gt;true&lt;/span&gt;
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23806782ffdaef297f6c9e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step 3-2) Application 배포시 참조하는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;new-values.yaml&lt;/code&gt; 확인 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://github.com/hyungwook0221/spring-boot-debug-app/blob/main/infra/helm/new-values.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;GitHub&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b2a1e2c363c49ed8df&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-size: 0.9rem; line-height: 1.5; overflow-wrap: normal; direction: ltr;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;serviceAccount&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;create&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #e35549;&quot; class=&quot;token boolean important&quot;&gt;true&lt;/span&gt;

&lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;image&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;repository&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; luafanti/spring&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;boot&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;debug&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;app
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;tag&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; main
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;pullPolicy&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; IfNotPresent

&lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;replicaCount&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;1&lt;/span&gt;

&lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;resources&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;memoryRequest&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 256Mi
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;memoryLimit&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 512Mi
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;cpuRequest&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 500m
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;cpuLimit&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;1&lt;/span&gt;

&lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;probes&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;liveness&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;initialDelaySeconds&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;15&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; /actuator/health/liveness
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;failureThreshold&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;3&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;successThreshold&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;1&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;timeoutSeconds&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;3&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;periodSeconds&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;5&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;readiness&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;initialDelaySeconds&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;15&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; /actuator/health/readiness
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;failureThreshold&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;3&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;successThreshold&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;1&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;timeoutSeconds&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;3&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;periodSeconds&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;5&lt;/span&gt;

&lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;ports&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;http&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; http
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;8080&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;management&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; management
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;8081&lt;/span&gt;

&lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;envs&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; VAULT_SECRET_USER
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &amp;lt;path&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;secret/data/sampleapp/config&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;#username&amp;gt;&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; VAULT_SECRET_PASSWORD
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &amp;lt;path&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;secret/data/sampleapp/config&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;#password&amp;gt;&lt;/span&gt;

&lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;level&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;spring&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;&quot;info&quot;&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;service&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;&quot;info&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;notion-external-object notion-github&quot; style=&quot;box-sizing: border-box; margin: 4px 0px; border: 1px solid var(--color-border-dark); border-radius: 4px; overflow: hidden;&quot;&gt;&lt;a style=&quot;box-sizing: border-box; text-decoration-line: none; color: #000000;&quot; href=&quot;https://github.com/hyungwook0221/spring-boot-debug-app/blob/main/infra/helm/new-values.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
&lt;div class=&quot;notion-external-object__attributes&quot; style=&quot;box-sizing: border-box; padding: 10px; display: flex; align-items: center;&quot;&gt;&lt;img class=&quot;notion-external-object__avatar circular&quot; style=&quot;box-sizing: border-box; width: 30px; height: 30px; border-radius: 100%;&quot; src=&quot;https://10--k8s--.super.site/images/embeds/github.png&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;
&lt;div class=&quot;notion-external-object__details&quot; style=&quot;box-sizing: border-box; font-size: 14px; margin-left: 10px; overflow: hidden;&quot;&gt;
&lt;p class=&quot;notion-external-object__title&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; overflow: hidden; text-overflow: ellipsis; text-wrap-mode: nowrap; color: var(--color-text-default);&quot; data-ke-size=&quot;size16&quot;&gt;Embed GitHub&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23802ea406ee5b40d1657b&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step 3-3) 실제 배포시 적용된 화면&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380cc9c65dae24d5a1ed0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;ArgoCD Vault Plugin 적용된 화면 : &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;[DETAILS] - [PARAMETERS]&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380fc82f9de6998661e8c&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1050px; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; width: 1050px; object-fit: contain; border-radius: var(--image-border-radii); object-position: center center;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/ad2a01e7-2f99-40ef-819d-57d0a8848e9a/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-80fc-82f9-de6998661e8c&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744473600000&amp;amp;signature=RZB3ezgWA7wtMe2BeFUnzYjIfuXDw6199GT615hCkgM&quot; alt=&quot;image&quot; width=&quot;720&quot; height=&quot;141.1970802919708&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23805cb36cc687abe9c2fe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Application 배포화면&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23803a8552cccfd25992e8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Deployment에 적용된 env 값 확인 :&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380f08040c64d0bed143b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; color: #383942; background: #f9f9f9; font-size: 1rem; line-height: 1.5; overflow-wrap: normal; margin: 0.5em 0px; direction: ltr; padding: 1em; border-radius: 0.3em; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none;&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; word-spacing: normal; word-break: normal; tab-size: 2; hyphens: none; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-size: 0.9rem; line-height: 1.5; overflow-wrap: normal; direction: ltr;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;envs&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; VAULT_SECRET_USER
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &amp;lt;path&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;secret/data/sampleapp/config&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;#username&amp;gt;&lt;/span&gt;
  &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; VAULT_SECRET_PASSWORD
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &amp;lt;path&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;secret/data/sampleapp/config&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;#password&amp;gt;&lt;/span&gt;
    
&lt;span style=&quot;box-sizing: border-box; color: #9fa0a6; font-style: italic;&quot; class=&quot;token comment&quot;&gt;# argocd application에서 deployment live manifest 정보&lt;/span&gt;
    &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;spec&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;containers&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;env&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
            &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; LOG_LEVEL_SERVICE
              &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; info
            &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; LOG_LEVEL_SPRING
              &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; info
            &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; JSON_LOGS_ENABLED
              &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #50a04f;&quot; class=&quot;token string&quot;&gt;'false'&lt;/span&gt;
            &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; VAULT_SECRET_USER
              &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; demo&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token number&quot;&gt;1&lt;/span&gt;
            &lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; VAULT_SECRET_PASSWORD
              &lt;span style=&quot;box-sizing: border-box; color: #b66a00;&quot; class=&quot;token key atrule&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; p@ssw0rd&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380578651f3bba123ac0a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/0799eac8-3dee-4392-ac08-48e30e2f7d35/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-8057-8651-f3bba123ac0a&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744473600000&amp;amp;signature=9i9GDHTEzBBQWDemJpTqGQlDYH3MRMrYdHTV0nety3Y&quot; alt=&quot;image&quot; width=&quot;768&quot; height=&quot;375.1791730474732&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23803ebcf7f65af6c8b888&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/dd8bccc4-03ad-4115-9414-7bfe58aca751/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-803e-bcf7-f65af6c8b888&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744473600000&amp;amp;signature=F645fmk19RFyJa1gp5DPO9ochVAi1wWqp9yNcasx9mA&quot; alt=&quot;image&quot; width=&quot;672&quot; height=&quot;426.77419354838713&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380e5849ce715797204bc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;ArgoCD App 삭제 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;kubectl delete applications demo&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380629311dfa446fd49c3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23805faa68e1d964ea3bb4&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(참고) Unknown 에러 발생시 redis 파드 재배포 후 필요&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23803a870bd2bbc004b776&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;ArgoCD repo-server 재기동 &amp;rarr; Redis 재기동 &amp;rarr; Application 재생성&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380c4baf1d17e6e7b981e&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1106px; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; width: 1106px; object-fit: contain; border-radius: var(--image-border-radii); object-position: center center;&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/1afa2c67-b482-4135-9ac4-ef97d45a398a/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-80c4-baf1-d17e6e7b981e&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744473600000&amp;amp;signature=jbn5QChyfPSCNocr_67Gat5n3D9TWtD33hkDLTKMpyI&quot; alt=&quot;image&quot; width=&quot;667.4869384765625&quot; height=&quot;230.20682239935545&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380e8a6b3d3aafee977d2&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 0.25s; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box;&quot; class=&quot;highlighted-background bg-yellow&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &amp;nbsp;추가 학습자료&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238089bf3af181325948b5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px;&quot;&gt;Exploring GitOps with Argo CD and HashiCorp Vault in Kubernetes - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://tekanaid.com/posts/argo-cd-and-hashicorp-vault-how-to-secure-kubernetes-deployments/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link1,&lt;/a&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 0.1s ease-in, opacity 0.1s ease-in;&quot; href=&quot;https://tekanaid.com/posts/argo-cd-and-hashicorp-vault-how-to-secure-kubernetes-deployments/#code&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link2&lt;/a&gt; &lt;span style=&quot;box-sizing: border-box; background-color: var(--color-bg-yellow);&quot; class=&quot;highlighted-background bg-yellow&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;  Vault Plugin 패턴은 아니지만 위와 같은 방법도 좋아보이네요&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;6. Vault Secrets Operator&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c23803e8c5bed440aa0ed91&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;6.1. VSO란? - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/vso&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c23809691bffb30e17f7bba&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault Secrets Operator(VSO)는 Kubernetes Secrets에서 Vault secrets 및 HCP Vault Secrets Apps를 네이티브하게 사용할 수 있도록 Pods에 제공해줍니다.&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380c89cebed09a8b94e30&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;개요&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380eda387e6298d2e5fc3&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault Secrets Operator는 지원하는 Custom Resource Definitions(CRD) 집합의 변경 사항을 감시하여 작동합니다. 각 CRD는 시크릿의 지원되는 소스 중 하나에서 Kubernetes Secret으로 동기화할 수 있도록 필요한 사양을 제공합니다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c238021beffcf7873fb0fac&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;오퍼레이터는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;소스 시크릿 데이터를 대상 Kubernetes Secret에 직접 작성하며, 소스에 변경 사항이 발생할 경우 해당 내용을 대상에도 수명 주기 동안 지속적으로 반영&lt;/span&gt;합니다. 이렇게 함으로써 애플리케이션은 대상 시크릿에만 접근하면 그 안의 시크릿 데이터를 사용할 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380029137dc13835d80ff&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기능&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c23800badaff7758850fd47&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault Secrets Operator가 지원하는 주요 기능은 다음과 같습니다:&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238027bd06cf4a82182101&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;여러 시크릿 소스로부터의 동기화 지원&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380e3a9aae184fc095ddd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;자동 시크릿 일탈 감지 및 수정&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23809e85d5d02f1806e17f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Deployment, ReplicaSet, StatefulSet Kubernetes 리소스 유형에 대한 자동 시크릿 교체&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380f79f20c7f52fdd7b10&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;오퍼레이터 모니터링을 위한 Prometheus 전용 계측 지원&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380e49636ea2da005dc30&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Helm 또는 Kustomize를 통한 설치 지원&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380c8a9d1c329c48f366a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;시크릿 데이터 변환 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380cc8241db17d91cb72f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;지원되는 Kubernetes 배포판&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380b9ae59dd2e252f754a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Vault Secrets Operator는 다음과 같은 호스팅된 Kubernetes 환경에서 성공적으로 테스트되었습니다:&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23800f8ab9fea06d5d64ca&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Amazon Elastic Kubernetes Service (EKS)&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380c0ba95f6782b23a532&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Google Kubernetes Engine (GKE)&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23802c9ab5fa8c124dbf29&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Microsoft Azure Kubernetes Service (AKS)&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380668d2bdbf1b9bd01c8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Red Hat OpenShift (공식 인증됨)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380e2a9adfdcb561c0e2a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;유사한 오픈소스 프로젝트는? - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://external-secrets.io/latest/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;ESO(External Secrets Operator)&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c238096bd71d3e4f902fca4&quot; class=&quot;notion-image align-center normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: center; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/74f5eacf-29af-4c51-acf6-e9619231d435/image/w=1200,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/74f5eacf-29af-4c51-acf6-e9619231d435/image/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/74f5eacf-29af-4c51-acf6-e9619231d435/image/w=1200,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;576&quot; height=&quot;333.58273381294964&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23803c97b6f2aae9337918&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c23807e8059ee260c98522b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;5.2. VSO 구성도 - 개발자(Developer) / 운영자(Operator)의 역할&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c23804f9ca5ea30421efece&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1112px; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; width: 1112px; object-fit: contain; border-radius: var(--image-border-radii); color: transparent; object-position: center center;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c2015212-856f-4696-91b2-9cd6d780fd8a/image/w=3840,quality=90,fit=scale-down&quot; sizes=&quot;(max-width: 546px) 100vw, 100vw&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c2015212-856f-4696-91b2-9cd6d780fd8a/image/w=640,quality=90,fit=scale-down 640w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c2015212-856f-4696-91b2-9cd6d780fd8a/image/w=750,quality=90,fit=scale-down 750w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c2015212-856f-4696-91b2-9cd6d780fd8a/image/w=828,quality=90,fit=scale-down 828w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c2015212-856f-4696-91b2-9cd6d780fd8a/image/w=1080,quality=90,fit=scale-down 1080w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c2015212-856f-4696-91b2-9cd6d780fd8a/image/w=1200,quality=90,fit=scale-down 1200w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c2015212-856f-4696-91b2-9cd6d780fd8a/image/w=1920,quality=90,fit=scale-down 1920w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c2015212-856f-4696-91b2-9cd6d780fd8a/image/w=2048,quality=90,fit=scale-down 2048w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/c2015212-856f-4696-91b2-9cd6d780fd8a/image/w=3840,quality=90,fit=scale-down 3840w&quot; alt=&quot;Vault Secrets Operator(출처: &quot; width=&quot;1.9986978769302368&quot; height=&quot;0.8489261034565667&quot; data-nimg=&quot;1&quot; /&gt;Vault Secrets Operator(출처: 
&lt;div&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.hashicorp.com/en/blog/kubernetes-vault-integration-via-sidecar-agent-injector-vs-csi-provider&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;HashiCorp Blog&lt;/a&gt;&lt;/div&gt;
)&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380d79cedeaf2c75cdf52&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c23803ca344d135e5a0a3cd&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;5.3. VSO - Vault 매핑구조&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380f1a07fd114da9f79c3&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/985cff3a-4044-4faf-8e19-4f3b0574d16e/image/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/985cff3a-4044-4faf-8e19-4f3b0574d16e/image/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/985cff3a-4044-4faf-8e19-4f3b0574d16e/image/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;578.1460506706409&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b2992dc7a85f2cbd43&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/9011c43a-ed02-4dd5-9fb3-73053572e58b/image/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/9011c43a-ed02-4dd5-9fb3-73053572e58b/image/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/9011c43a-ed02-4dd5-9fb3-73053572e58b/image/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;711.1111111111111&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23803c9240e89c00b6afbc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c23804c8771ead88820f16a&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;5.4. VSO 주요 CRD 정보 및 예시&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c238040b780dafb26548620&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;VSO CRD 관계도&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c238079aa74c8258b37ddb3&quot; class=&quot;notion-image align-center normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: center; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/0a795d5c-b836-4cf5-a9c7-87786a4118e1/image/w=1920,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/0a795d5c-b836-4cf5-a9c7-87786a4118e1/image/w=1080,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/0a795d5c-b836-4cf5-a9c7-87786a4118e1/image/w=1920,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;1015.1674208144797&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23805d970ae5cf1088f1e6&quot; class=&quot;notion-image align-center normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: center; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ceacec2d-001b-4966-94f0-8bafc169ae0a/985429f8-5c6c-4aac-aaeb-76bf56d6b363/w=750,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ceacec2d-001b-4966-94f0-8bafc169ae0a/985429f8-5c6c-4aac-aaeb-76bf56d6b363/w=384,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ceacec2d-001b-4966-94f0-8bafc169ae0a/985429f8-5c6c-4aac-aaeb-76bf56d6b363/w=750,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;336&quot; height=&quot;358.4&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380369550fdcb93980224&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/vso/sources/vault#vaultconnection-custom-resource&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;VaultConnect&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380578d15ce075fe9356c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultConnection
metadata:
  namespace: vso-example
  name: vault-connection
spec:
  # required configuration
  # address to the Vault server.
  address: http://vault.vault.svc.cluster.local:8200&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b5b3d0cf816f02b455&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/vso/sources/vault#vaultconnection-custom-resource&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;VaultAuth&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23806ababcd560f2526e88&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultAuth
metadata:
  namespace: vso-example
  name: vault-auth
spec:
  # required configuration
  # VaultConnectionRef of the corresponding VaultConnection CustomResource.
  # If no value is specified the Operator will default to the `default` VaultConnection,
  # configured in its own Kubernetes namespace.
  vaultConnectionRef: vault-connection
  # Method to use when authenticating to Vault.
  method: kubernetes
  # Mount to use when authenticating to auth method.
  mount: kubernetes
  # Kubernetes specific auth configuration, requires that the Method be set to kubernetes.
  kubernetes:
    # role to use when authenticating to Vault
    role: example
    # ServiceAccount to use when authenticating to Vault
    # it is recommended to always provide a unique serviceAccount per Pod/application
    serviceAccount: default&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238000ba06c8a67bc76fd7&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/vso/sources/vault#vaultauthglobal-custom-resource&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;VaultAuthGlobal&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380d98aabe6610853eb70&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultAuthGlobal
metadata:
  namespace: vso-example
  name: vault-auth-global
spec:
  defaultAuthMethod: kubernetes
  kubernetes:
    audiences:
    - vault
    mount: kubernetes
    namespace: example-ns
    role: auth-role
    serviceAccount: default
    tokenExpirationSeconds: 600
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultAuth
metadata:
  namespace: vso-example
  name: vault-auth
spec:
  vaultAuthGlobalRef:
    name: vault-auth-global
  kubernetes:
    role: local-role
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380dc8d0cd1251c390499&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/vso/sources/vault#vaultstaticsecret-custom-resource&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;VaultStaticSecret&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380f8a6c4c5b9428abd24&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# KV Version 1
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
  namespace: vso-example
  name: vault-static-secret-v1
spec:
  vaultAuthRef: vault-auth
  mount: kvv1
  type: kv-v1
  path: eng/apikey/google
  refreshAfter: 60s
  destination:
    create: true
    name: static-secret1
---
# KV Version 2
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
  namespace: vso-example
  name: vault-static-secret-v2
spec:
  vaultAuthRef: vault-auth
  mount: kvv2
  type: kv-v2
  path: eng/apikey/google
  version: 2
  refreshAfter: 60s
  destination:
    create: true
    name: static-secret2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23800c9fcaf3eab0c8dca6&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/vso/sources/vault#vaultdynamicsecret-custom-resource&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;VaultDynamicSecret&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380a09c53e9399ac4ec6d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# DB Secret 예시
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultDynamicSecret
metadata:
  namespace: vso-example
  name: vault-dynamic-secret-db
spec:
  vaultAuthRef: vault-auth
  mount: db
  path: creds/my-postgresql-role
  destination:
    create: true
    name: dynamic-db
---
# AWS Secret 예시
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultDynamicSecret
metadata:
  namespace: vso-example
  name: vault-dynamic-secret-aws-iam
spec:
  vaultAuthRef: vault-auth
  mount: aws
  path: creds/my-iam-role
  destination:
    create: true
    name: dynamic-aws-iam&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380f7878cdf24d80a59fd&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/vso/sources/vault#vaultpkisecret-custom-resource&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;VaultPKISecret&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380fe9d87d98b045ee5f8&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultPKISecret
metadata:
  namespace: vso-example
  name: vault-pki
spec:
  vaultAuthRef: vault-auth
  mount: pki
  role: default
  commonName: example.com
  format: pem
  expiryOffset: 1s
  ttl: 60s
  namespace: tenant-1
  destination:
    create: true
    name: pki1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23809d8040f8e309900392&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c238012aec9de7e6f75af1d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;5.5. VSO Static Secrets&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23806bb064c3181e384572&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;운영자가 단일 Vault 정적 시크릿을 단일 Kubernetes 시크릿으로 동기화하는 데 필요한 구성입니다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380159685d4681c79be0b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지원되는 시크릿 엔진: kv-v2, kv-v1&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380ab865ed4d59c2feca8&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;워크플로우 및 아키텍처&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23807d9791d6e7cb99742d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e5cfe452-2ca9-47ba-8146-201aea3aef9a/image/w=1080,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e5cfe452-2ca9-47ba-8146-201aea3aef9a/image/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/e5cfe452-2ca9-47ba-8146-201aea3aef9a/image/w=1080,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;480&quot; height=&quot;420.18691588785043&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23808895caf9f0782aac26&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습: &lt;a class=&quot;notion-link notion-page link-mention&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; cursor: pointer; margin: 1px 0px; border-radius: 5px; padding: 3px 0px 3px 5px; padding-inline-end: 4px; display: inline; transition: background 120ms ease-in; vertical-align: middle; color: inherit; position: relative;&quot; href=&quot;https://developer.hashicorp.com/vault/tutorials/kubernetes/vault-secrets-operator&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: cover; object-position: center center;&quot; src=&quot;https://developer.hashicorp.com/favicon.ico&quot; alt=&quot;Manage Kubernetes native secrets with the Vault Secrets Operator | Vault | HashiCorp Developer Manage Kubernetes native secrets with the Vault Secrets Operator | Vault | HashiCorp Developer&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;span style=&quot;box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; line-height: 1.5rem; word-break: break-word; text-decoration-line: underline; text-decoration-color: var(--color-border-dark); text-decoration-thickness: 1px; text-underline-offset: 2px; padding: 1px 2px; border-radius: 4px;&quot; class=&quot;notion-page__title notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Manage Kubernetes native secrets with the Vault Secrets Operator | Vault | HashiCorp Developer &lt;/span&gt;Manage Kubernetes native secrets with the Vault Secrets Operator | Vault | HashiCorp Developer&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b08a01f1d6c1c3afa9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380a386badcd6d9972023&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;5.6. VSO Dynamic Secrets&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380a3a43dc28c665b851f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Vault의 Dynamic Secret Engine을 활용하여 동적으로 변경되는 Secrets을 K8s Secrets에 동기화&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23801ca7afd7466dc6f0c0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;지원되는 시크릿 엔진: DB Credentials, Cloud Credentials(AWS, Azure, GCP 등)&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380929ce9ceb48532a7b2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380c8a109e662c4921e61&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;5.6.1. &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;시나리오&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380ec9490d16989970ede&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Spring(Web Application) &amp;rarr; DB 접근하기 위해서는 DB Credentials을 K8s Secrets으로 참조해야함&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23807b9072e0f80c97ad10&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;대상 DB에 접근하기 위한 DB Credentials을 Vault의 Dynamic Secrets 기능을 활용하여 주기적으로 변경하고 VSO을 통해 K8s Secets에 갱신(업데이트)&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238015b990c1e930303049&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Spring(Web Application)에서는 갱신된 DB Credentials 정보를 K8s Secret을 통해서 읽어오기 위해 재기동(&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/vso/api-reference#rolloutrestarttarget&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;rolloutRestartTargets&lt;/a&gt; 설정)&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c23803cb92ff72ed379cfb5&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/574e96f7-4de7-4ae4-89fe-39494f407540/image/w=1080,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/574e96f7-4de7-4ae4-89fe-39494f407540/image/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/574e96f7-4de7-4ae4-89fe-39494f407540/image/w=1080,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;528&quot; height=&quot;692.1315789473684&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238091b2c1d9ad742baf14&quot; class=&quot;notion-video&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; text-align: center; width: 1056px;&quot;&gt;
&lt;div class=&quot;notion-video__content&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;video style=&quot;box-sizing: border-box; outline: none; max-width: 100%;&quot; controls=&quot;controls&quot; width=&quot;629.4591674804688px&quot;&gt;&lt;/video&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380e19204f64b034f57c9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380fa9a3fd5578f0775f0&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;실습&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c238044a99dcbb3679c8335&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step1. VSO 배포를 위한 Chart Values 파일 작성&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c238014a0c0f4926b8a099d&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# vault-operator-values.yaml
defaultVaultConnection:
  enabled: true
  address: &quot;http://vault.vault.svc.cluster.local:8200&quot;
  skipTLSVerify: false
controller:
  manager:
    clientCache:
      persistenceModel: direct-encrypted
      storageEncryption:
        enabled: true
        mount: k8s-auth-mount
        keyName: vso-client-cache
        transitMount: demo-transit
        kubernetes:
          role: auth-role-operator
          serviceAccount: vault-secrets-operator-controller-manager
          tokenAudiences: [&quot;vault&quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238064ac8ac5bd1f94c22f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Values 구성요소 분석&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380548186e5f7bdb69303&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;defaultVaultConnection&lt;/code&gt;: 기본 Vault 연결 설정을 구성&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380e99c14de2e4b975ed2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;address&lt;/code&gt;: vault.vault.svc.cluster.local:8200 (Helm으로 설치된 Vault의 ClusterIP)&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380ecb476e00f2b05ace9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;skipTLSVerify: false&lt;/code&gt;: TLS 검증 비활성화 안 함 (Vault에 TLS 적용된 경우 주의 필요)&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d3b8b2c1c23809a9f30f132adefd3f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;clientCache 설정&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380588cd5c6d2e56df68a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;persistenceModel&lt;/code&gt;: direct-encrypted: 암호화된 데이터를 직접 저장&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238053b50de80b3477761c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;storageEncryption.enabled&lt;/code&gt;: true: 암호화 기능 활성화&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23807fb4f2edc49539cd4b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;transitMount: demo-transit&lt;/code&gt;: 앞에서 Vault에 만든 Transit 엔진 mount path&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238074ad6aecf487528814&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;keyName: vso-client-cache&lt;/code&gt;: Transit에서 사용하는 암호화 키&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23801f890ae2b385efa5a9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;mount: k8s-auth-mount&lt;/code&gt;: Kubernetes 인증 방식에서 사용할 auth path&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380809ef6c58596b75ca1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;kubernetes.role&lt;/code&gt;: auth-role-operator 라는 Role에 지정된 정책으로 암복호화 가능&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238036b7bedf254093865a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;serviceAccount&lt;/code&gt;: VSO가 사용하는 ServiceAccount 이름&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380949757f4d29e1b9a4c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;tokenAudiences&lt;/code&gt;: Vault 서버에서 사용하는 audience 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d3b8b2c1c23804c8548e9778a6ca652&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;위와 같은 설정으로 VSO는 Vault에 인증된 후, 동적/정적 시크릿을 Kubernetes 리소스로 가져오고, 가져온 시크릿 데이터를 자체적으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;암호화해 캐시&lt;/span&gt; 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238042a83fe0243545640f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step2. VSO 배포&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380ccab43cd25c70ab0c1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;helm install vault-secrets-operator hashicorp/vault-secrets-operator \
  -n vault-secrets-operator-system \
  --create-namespace \
  --values vault-operator-values.yaml
  
#
kubectl get-all -n vault-secrets-operator-system

#
kubectl get pod -n vault-secrets-operator-system      
NAME                                                         READY   STATUS    RESTARTS   AGE
vault-secrets-operator-controller-manager-7f67cd89fd-ds5jc   2/2     Running   0          11m

kubectl describe pod -n vault-secrets-operator-system                                       
...
Service Account:  vault-secrets-operator-controller-manager
...
Containers:
  kube-rbac-proxy:
    Container ID:  containerd://db3eae7b836fb4f1b4236c494c8fa96ada94769a6c602e1a150c75293a6a4162
    Image:         quay.io/brancz/kube-rbac-proxy:v0.18.1
  ...
  manager:
    Container ID:  containerd://1ab1545fb4bd86ac52d6c7609a3e962cd2d1a81daa9bbd9c82f79d9a0d8b6466
    Image:         hashicorp/vault-secrets-operator:0.10.0
...

#
kubectl rbac-tool lookup vault-secrets-operator-controller-manager
  SUBJECT                                   | SUBJECT TYPE   | SCOPE       | NAMESPACE                     | ROLE                                        | BINDING                                             
--------------------------------------------+----------------+-------------+-------------------------------+---------------------------------------------+-----------------------------------------------------
  vault-secrets-operator-controller-manager | ServiceAccount | ClusterRole |                               | vault-secrets-operator-proxy-role           | vault-secrets-operator-proxy-rolebinding            
  vault-secrets-operator-controller-manager | ServiceAccount | ClusterRole |                               | vault-secrets-operator-manager-role         | vault-secrets-operator-manager-rolebinding          
  vault-secrets-operator-controller-manager | ServiceAccount | Role        | vault-secrets-operator-system | vault-secrets-operator-leader-election-role | vault-secrets-operator-leader-election-rolebinding  

#
kubectl rolesum vault-secrets-operator-controller-manager -n vault-secrets-operator-system
ServiceAccount: vault-secrets-operator-system/vault-secrets-operator-controller-manager
Secrets:

Policies:
&amp;bull; [RB] vault-secrets-operator-system/vault-secrets-operator-leader-election-rolebinding ⟶  [R] vault-secrets-operator-system/vault-secrets-operator-leader-election-role
  Resource                    Name  Exclude  Verbs  G L W C U P D DC  
  configmaps                  [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖   
  events                      [*]     [-]     [-]   ✖ ✖ ✖ ✔ ✖ ✔ ✖ ✖   
  leases.coordination.k8s.io  [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖   


&amp;bull; [CRB] */vault-secrets-operator-manager-rolebinding ⟶  [CR] */vault-secrets-operator-manager-role
  Resource                                                Name  Exclude  Verbs  G L W C U P D DC  
  configmaps                                              [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
  daemonsets.apps                                         [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✔ ✖ ✖   
  deployments.apps                                        [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✔ ✖ ✖   
  events                                                  [*]     [-]     [-]   ✖ ✖ ✖ ✔ ✖ ✔ ✖ ✖   
  hcpauths.secrets.hashicorp.com                          [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖   
  hcpauths.secrets.hashicorp.com/finalizers               [*]     [-]     [-]   ✖ ✖ ✖ ✖ ✔ ✖ ✖ ✖   
  hcpauths.secrets.hashicorp.com/status                   [*]     [-]     [-]   ✔ ✖ ✖ ✖ ✔ ✔ ✖ ✖   
  hcpvaultsecretsapps.secrets.hashicorp.com               [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖   
  hcpvaultsecretsapps.secrets.hashicorp.com/finalizers    [*]     [-]     [-]   ✖ ✖ ✖ ✖ ✔ ✖ ✖ ✖   
  hcpvaultsecretsapps.secrets.hashicorp.com/status        [*]     [-]     [-]   ✔ ✖ ✖ ✖ ✔ ✔ ✖ ✖   
  rollouts.argoproj.io                                    [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✔ ✖ ✖   
  secrets                                                 [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔   
  secrettransformations.secrets.hashicorp.com             [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖   
  secrettransformations.secrets.hashicorp.com/finalizers  [*]     [-]     [-]   ✖ ✖ ✖ ✖ ✔ ✖ ✖ ✖   
  secrettransformations.secrets.hashicorp.com/status      [*]     [-]     [-]   ✔ ✖ ✖ ✖ ✔ ✔ ✖ ✖   
  serviceaccounts                                         [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖   
  serviceaccounts/token                                   [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✖ ✖ ✖ ✖   
  statefulsets.apps                                       [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✔ ✖ ✖   
  vaultauthglobals.secrets.hashicorp.com                  [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖   
  vaultauthglobals.secrets.hashicorp.com/finalizers       [*]     [-]     [-]   ✖ ✖ ✖ ✖ ✔ ✖ ✖ ✖   
  vaultauthglobals.secrets.hashicorp.com/status           [*]     [-]     [-]   ✔ ✖ ✖ ✖ ✔ ✔ ✖ ✖   
  vaultauths.secrets.hashicorp.com                        [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖   
  vaultauths.secrets.hashicorp.com/finalizers             [*]     [-]     [-]   ✖ ✖ ✖ ✖ ✔ ✖ ✖ ✖   
  vaultauths.secrets.hashicorp.com/status                 [*]     [-]     [-]   ✔ ✖ ✖ ✖ ✔ ✔ ✖ ✖   
  vaultconnections.secrets.hashicorp.com                  [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖   
  vaultconnections.secrets.hashicorp.com/finalizers       [*]     [-]     [-]   ✖ ✖ ✖ ✖ ✔ ✖ ✖ ✖   
  vaultconnections.secrets.hashicorp.com/status           [*]     [-]     [-]   ✔ ✖ ✖ ✖ ✔ ✔ ✖ ✖   
  vaultdynamicsecrets.secrets.hashicorp.com               [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖   
  vaultdynamicsecrets.secrets.hashicorp.com/finalizers    [*]     [-]     [-]   ✖ ✖ ✖ ✖ ✔ ✖ ✖ ✖   
  vaultdynamicsecrets.secrets.hashicorp.com/status        [*]     [-]     [-]   ✔ ✖ ✖ ✖ ✔ ✔ ✖ ✖   
  vaultpkisecrets.secrets.hashicorp.com                   [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖   
  vaultpkisecrets.secrets.hashicorp.com/finalizers        [*]     [-]     [-]   ✖ ✖ ✖ ✖ ✔ ✖ ✖ ✖   
  vaultpkisecrets.secrets.hashicorp.com/status            [*]     [-]     [-]   ✔ ✖ ✖ ✖ ✔ ✔ ✖ ✖   
  vaultstaticsecrets.secrets.hashicorp.com                [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖   
  vaultstaticsecrets.secrets.hashicorp.com/finalizers     [*]     [-]     [-]   ✖ ✖ ✖ ✖ ✔ ✖ ✖ ✖   
  vaultstaticsecrets.secrets.hashicorp.com/status         [*]     [-]     [-]   ✔ ✖ ✖ ✖ ✔ ✔ ✖ ✖   


&amp;bull; [CRB] */vault-secrets-operator-proxy-rolebinding ⟶  [CR] */vault-secrets-operator-proxy-role
  Resource                                   Name  Exclude  Verbs  G L W C U P D DC  
  subjectaccessreviews.authorization.k8s.io  [*]     [-]     [-]   ✖ ✖ ✖ ✔ ✖ ✖ ✖ ✖   
  tokenreviews.authentication.k8s.io         [*]     [-]     [-]   ✖ ✖ ✖ ✔ ✖ ✖ ✖ ✖   

#
kubectl get vaultauth -n vault-secrets-operator-system vault-secrets-operator-default-transit-auth -o jsonpath='{.spec}' | jq
{
  &quot;kubernetes&quot;: {
    &quot;audiences&quot;: [
      &quot;vault&quot;
    ],
    &quot;role&quot;: &quot;auth-role-operator&quot;,
    &quot;serviceAccount&quot;: &quot;vault-secrets-operator-controller-manager&quot;,
    &quot;tokenExpirationSeconds&quot;: 600
  },
  &quot;method&quot;: &quot;kubernetes&quot;,
  &quot;mount&quot;: &quot;k8s-auth-mount&quot;,
  &quot;storageEncryption&quot;: {
    &quot;keyName&quot;: &quot;vso-client-cache&quot;,
    &quot;mount&quot;: &quot;demo-transit&quot;
  },
  &quot;vaultConnectionRef&quot;: &quot;default&quot;
}

kubectl get vaultconnection -n vault-secrets-operator-system default -o jsonpath='{.spec}' | jq
{
  &quot;address&quot;: &quot;http://vault.vault.svc.cluster.local:8200&quot;,
  &quot;skipTLSVerify&quot;: false
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380cabbbac358fbf9dc8b&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step3. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;PostgreSQL 설치 (Bitnami Helm Chart)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23807c8e48c9ef61d21880&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;kubectl create ns postgres

helm repo add bitnami https://charts.bitnami.com/bitnami

helm upgrade --install postgres bitnami/postgresql \
  --namespace postgres \
  --set auth.audit.logConnections=true \
  --set auth.postgresPassword=secret-pass
  
# psql 로그인 확인
kubectl exec -it -n postgres postgres-postgresql-0 -- sh -c 'PGPASSWORD=secret-pass psql -U postgres -h localhost'
kubectl exec -it -n postgres postgres-postgresql-0 -- sh -c &quot;PGPASSWORD=secret-pass psql -U postgres -h localhost -c '\l'&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23808eaed2c0ba7ce6b2c8&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step4. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Kubernetes Auth Method 설정&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23808ea17dc36d6c8201c1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
kubectl exec -it vault-0 -n vault -- cat /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-----BEGIN CERTIFICATE-----
MIIDBTCCAe2gAwIBAgIIfA5oV86RmOswDQYJKoZIhvcNAQELBQAwFTETMBEGA1UE
AxMKa3ViZXJuZXRlczAeFw0yNTA0MTAwMDUzMTdaFw0zNTA0MDgwMDU4MTdaMBUx
EzARBgNVBAMTCmt1YmVybmV0ZXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQDSUCHyBXVhBb91uZKdqwFAussfSxqPadYhrj659fp/XuJQrRrOMLZAh5eP
6MCkeYbHeMY2stwBzuwzSzyaxkJdKiR5yKhtIHT7vpYn4XT0bNdyWWKAHkjyqjsk
DYkAbwQ1xksL3DwArRfUSdZPCVsDLhu+G3wbGKiW64q0Rb1pEk/gK2AhxnSSqoeR
YNzh10FA/CxS2wiLFfsm8NAn4KHG134AKY0Vxb/EkXnL9b2jRK+BfSh/sSpuEzN3
16Xy1fC5UX/xCdTvwx+57xOoFhymaF0aVISSavzrkaYd8kaPwAKtoAlxvDmDrVhv
YKRfCTerHUCOL3IPQqChIZQIUvoVAgMBAAGjWTBXMA4GA1UdDwEB/wQEAwICpDAP
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSDK0FYEL+FNdgIpMhCnj9g2CkAIjAV
BgNVHREEDjAMggprdWJlcm5ldGVzMA0GCSqGSIb3DQEBCwUAA4IBAQC5/EdWTRD6
SoghjPe/bKKfQzFxPmEZVTb0JI0CWVUZorGzFcHCMCXMOf/XuECkK5tqn7QR/Nw8
yy3XvmT6DY+J2GshrusJXfMEOJ9RQIwDBJKHoZqbcyI/w294Ecp1Mpivb8WeI2FW
wMsaDoswQ3H/0zrEBwhhpUAWcmjm6w4/7Tsid9t1DsQrp9xH37wU/uP07HyEIKPS
TCQ2tUueHSVihNhCg7RejjbiGy8EUZV6aGIrtFgss9Mzk+5m+1KXm8o+Lj/YNYFx
JFeII2h3ZptO4I9vHrohXKVw0esHNzdHQPeGEXCWHTd+K38jIJPfggA8Yu1htbUa
MKEIbcT53UHH
-----END CERTIFICATE-----

# 해당 ca.crt 는 k8s 의 루트인증서 정보
kubectl exec -it vault-0 -n vault -- cat /var/run/secrets/kubernetes.io/serviceaccount/ca.crt &amp;gt; vso-ca.crt
openssl x509 -in vso-ca.crt -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 5268734382662717808 (0x491e4e018e7f9170)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN=kubernetes
...

# vault 서비스 어카운트의 token 확인
kubectl exec -it vault-0 -n vault -- cat /var/run/secrets/kubernetes.io/serviceaccount/token
eyJhbGciOiJSUzI1NiIsImtpZCI6IlhQM2UxWmlFX2tqWEVzN3FqMXhscHJ1VFB2cVRUcDd0czliZTlsNlF4SWcifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzc1OTgyNTM5LCJpYXQiOjE3NDQ0NDY1MzksImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiNDU3NzE3ODMtOTE3YS00OTQyLWFmYTAtMWY1ZmFlN2YxOWVkIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJ2YXVsdCIsIm5vZGUiOnsibmFtZSI6Im15azhzLXdvcmtlcjIiLCJ1aWQiOiI0YjQ0ZDgyMS1hM2UzLTQ4NzQtOTFhYi01MDQ2NjYxNjdkMjAifSwicG9kIjp7Im5hbWUiOiJ2YXVsdC0wIiwidWlkIjoiMjYyZTJlNGQtMjAxYy00YWU3LWEyZDktZTZiMDdmMDNmM2Y1In0sInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJ2YXVsdCIsInVpZCI6ImQ5MGYzMWI3LTIwYjYtNGNiNy04NjFlLWI4MDhhYjg5YWY2MyJ9LCJ3YXJuYWZ0ZXIiOjE3NDQ0NTAxNDZ9LCJuYmYiOjE3NDQ0NDY1MzksInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDp2YXVsdDp2YXVsdCJ9.tSEOCNGIge6tVmoNotiRnu2A77Bu76udz3uxYNEEMqjwM0aa4UnTaPrjFj_QCFKZ67Ebwwmy32AFAWKxTrf4w-un05k_Lz6huUMi7HtzoKQVwVlt6polMfAytu77ZbQ9PBMtTG7m_BR8Vc-KX7Y4CTT3cTUAbgp3M5uEsK07KQ9Pp0PIyO88ZW8eR50NihlAgNZdPVe7xSIaazJorE8z0QZ7amXi71RYc-qthStgiMXS8nLGGdkd6NzywNuDGOvAtD-6krNT9WS1qWMnmw_oDHY0gGEEMFuLIkkjJDVYsNJmWOJo-5WzD_XXPhz808msKrBgivpyWt842oGyC_rL5w

# https://jwt.io/ 에서 token 디코드 확인 시 PAYLOAD 부분
{
  &quot;aud&quot;: [
    &quot;https://kubernetes.default.svc.cluster.local&quot;
  ],
  &quot;exp&quot;: 1775982539,
  &quot;iat&quot;: 1744446539,
  &quot;iss&quot;: &quot;https://kubernetes.default.svc.cluster.local&quot;,
  &quot;jti&quot;: &quot;45771783-917a-4942-afa0-1f5fae7f19ed&quot;,
  &quot;kubernetes.io&quot;: {
    &quot;namespace&quot;: &quot;vault&quot;,
    &quot;node&quot;: {
      &quot;name&quot;: &quot;myk8s-worker2&quot;,
      &quot;uid&quot;: &quot;4b44d821-a3e3-4874-91ab-504666167d20&quot;
    },
    &quot;pod&quot;: {
      &quot;name&quot;: &quot;vault-0&quot;,
      &quot;uid&quot;: &quot;262e2e4d-201c-4ae7-a2d9-e6b07f03f3f5&quot;
    },
    &quot;serviceaccount&quot;: {
      &quot;name&quot;: &quot;vault&quot;,
      &quot;uid&quot;: &quot;d90f31b7-20b6-4cb7-861e-b808ab89af63&quot;
    },
    &quot;warnafter&quot;: 1744450146
  },
  &quot;nbf&quot;: 1744446539,
  &quot;sub&quot;: &quot;system:serviceaccount:vault:vault&quot;
}

# vault SA 토큰 만료 기간 : 대략 1시간(3600초)+7초
k get pod -n vault vault-0 -o yaml
...
 - name: kube-api-access-9rqgv
    projected:
      defaultMode: 420
      sources:
      - serviceAccountToken:
          expirationSeconds: 3607
          path: token
      - configMap:
          items:
          - key: ca.crt
            path: ca.crt
          name: kube-root-ca.crt



kubectl exec --stdin=true --tty=true vault-0 -n vault -- /bin/sh
----------------------------------------------------------------
# 최초 설치시 획득한 vault root token 사용. 
# 예시) hvs.hnlFKWjE10FOyrwLMeK9PrCC
vault login

# Kubernetes 인증 메서드 활성화
vault auth enable -path k8s-auth-mount kubernetes

#
vault auth list
Path               Type          Accessor                    Description                Version
----               ----          --------                    -----------                -------
approle/           approle       auth_approle_45429d98       n/a                        n/a
k8s-auth-mount/    kubernetes    auth_kubernetes_b6937d5c    n/a                        n/a
token/             token         auth_token_0e40cfed         token based credentials    n/a


# Kubernetes 클러스터 정보 구성
vault write auth/k8s-auth-mount/config \
  kubernetes_host=&quot;https://kubernetes.default.svc:443&quot; \
  kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt \
  token_reviewer_jwt=&quot;$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)&quot;

# 설정 확인  
vault read auth/k8s-auth-mount/config
Key                                  Value
---                                  -----
disable_iss_validation               true
disable_local_ca_jwt                 false
issuer                               n/a
kubernetes_ca_cert                   -----BEGIN CERTIFICATE-----
MIIDBTCCAe2gAwIBAgIISR5OAY5/kXAwDQYJKoZIhvcNAQELBQAwFTETMBEGA1UE
AxMKa3ViZXJuZXRlczAeFw0yNTA0MTIwNDM4MTBaFw0zNTA0MTAwNDQzMTBaMBUx
EzARBgNVBAMTCmt1YmVybmV0ZXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQC1OHyP0oqdQ+aTC7WMaCx7BfWN8/elTzEq3PeFAwP8GdliFVJnCXHF7kfk
91YDTUZDsTO0Sg1Wg2N5B0KI9Bn2fzni5SK+WpCmtDHomeg3ejDRKxZlR6NN3yHe
2b8SBsks8iqOa4x1RQkYLekW0V4Rb39hdtddSAdwinIcRGZZ2npGTsxOFcBx1H1J
Z1bP5XzBB3oT72FXvD0YVPLpovuSYM1gUhfNDp/ciiCmRqugwkz1e+BJy8PSvwPh
UedHX1mXoQJE7f9b7JE0MOd0JqOnMVh6SgyP9Np2i51TB/kw4qS6RwQql2WTUyBw
/UNCp+M1icctg+KdhpIr61eu6hdlAgMBAAGjWTBXMA4GA1UdDwEB/wQEAwICpDAP
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRGCrk8aIWMI0GhAjekQN28AZZNSzAV
BgNVHREEDjAMggprdWJlcm5ldGVzMA0GCSqGSIb3DQEBCwUAA4IBAQBSKsX17U7M
Tcle6jcpAD+10Tyan3gwuQRYEDx8PxI2cDcsnJKahRI3j94bRGQM0KgIabc9ngGp
oZv8i0UICoZJzikP8Mo8f2J0iiCR3G+yicVeHxC5Imdfdpuki8iHvncT8knoD36x
njpWF8BIIn5TwYkwZ8V9OA1vbRCjS/wo8K31MlSdUq0L6YIjkJB8Ng4no4lIhLgT
asY8eMWr7WNF/uv1LPAonCix6zJn3uYOz8r0mf+6Le4JVS8RR4guXs+19Nk94ZuC
758ubiAYE77tCtPYIxje5YDnsLyuigQ1t+8eIHTDYAF4J/s0/lKzVK9arpqYqUER
mivt2SPk260L
-----END CERTIFICATE-----
kubernetes_host                      https://kubernetes.default.svc:443
pem_keys                             []
token_reviewer_jwt_set               true
use_annotations_as_alias_metadata    false

----------------------------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380cbb000cd533a416047&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;vault write 명령 분석&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238065b903fae0ad8f2721&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Vault가 K8s API 서버에 인증 요청을 보낼 수 있도록 설정&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380108ea1caee7c1d6ce3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;kubernetes_host&lt;/code&gt;: API 서버 주소&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23809ba741eb1bb21eac65&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;kubernetes_ca_cert&lt;/code&gt;: API 서버의 CA 인증서 (Pod 내 ServiceAccount에서 자동 주입됨)&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380d8a3e0ff578ae0f275&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;token_reviewer_jwt&lt;/code&gt;: TokenReviewer 권한이 있는 토큰으로 Vault가 요청자의 토큰을 검증할 수 있도록 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380d288e0d8d6bba7b9f1&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step5. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Vault Kubernetes Auth Role 설정&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c23804d9936cb6bb7c26c0d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;실행 중인 애플리케이션이 Vault로부터 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DB 자격증명(동적 사용자)을 받아올 수 있도록 권한을 연결을 위한 설정&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c23805c9fbdca61dc6a4d03&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;vault write auth/k8s-auth-mount/role/auth-role \
   bound_service_account_names=demo-dynamic-app \
   bound_service_account_namespaces=demo-ns \
   token_ttl=0 \
   token_period=120 \
   token_policies=demo-auth-policy-db \
   audience=vault&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238014aef8c7235aa2bfbf&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# auth-role 생성
vault write auth/k8s-auth-mount/role/auth-role \
   bound_service_account_names=demo-dynamic-app \ # demo-dynamic-app 서비스 어카운트를 사용하는 Pod에서만 인증 허용, Pod 내부에서 Vault에 로그인하려면 이 서비스 어카운트를 써야 함
   bound_service_account_namespaces=demo-ns \ # 이 Role은 오직 demo-ns 네임스페이스에서 오는 요청만 허용
   token_ttl=0 \ # 발급되는 Vault 토큰의 기본 TTL 없음(0). 일반적으로 token_ttl=0이면 token_period가 사용됨
   token_period=120 \ # Lease 기간이 120초인 Renewable Token 발급. TTL이 없는 대신, 2분마다 갱신 가능한 토큰을 생성. 보통 이 설정은 &quot;periodic token&quot;이라 불리며, long-lived session에 적합.
   token_policies=demo-auth-policy-db \ # 인증에 성공하면 발급되는 토큰에 demo-auth-policy-db 정책이 적용
   audience=vault # JWT 토큰의 aud (Audience) claim 검증에 사용.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238074bd84f262fd6d9f5d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380f9a8a7d2053ea579a0&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step6. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Vault Database Secret Engine 설정&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23806c85b2d6e9dc30253c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# demo-db라는 경로로 Database Secret Engine을 활성화
vault secrets enable -path=demo-db database

# PostgreSQL 연결 정보 등록
# 해당 과정은 postgres가 정상적으로 동작 시 적용 가능
# allowed_roles: 이후 설정할 Role 이름 지정
vault write demo-db/config/demo-db \
   plugin_name=postgresql-database-plugin \
   allowed_roles=&quot;dev-postgres&quot; \
   connection_url=&quot;postgresql://{{username}}:{{password}}@postgres-postgresql.postgres.svc.cluster.local:5432/postgres?sslmode=disable&quot; \
   username=&quot;postgres&quot; \
   password=&quot;secret-pass&quot;
  
# DB 사용자 동적 생성 Role 등록
# 해당 Role 사용 시 Vault가 동적으로 사용자 계정과 비밀번호를 생성 가능
# TTL은 생성된 자격증명의 유효 시간 (30초~10분)
## creation_statements=... : Vault가 계정을 자동 생성할 때 실행할 SQL 문. {{name}}, {{password}}, {{expiration}}은 Vault가 자동으로 채워줌.
## revocation_statements=... : Vault가 동적 사용자 계정을 폐기(revoke)할 때 실행할 SQL 문. 권한을 모두 회수.
## default_ttl=&quot;1m&quot; / max_ttl=&quot;1m&quot; : 기본 1분만 유효합니다. 갱신을 안 하면 1분 후 자동 만료 (계정도 자동 삭제). 최대 TTL도 1분이므로 연장도 최대 1분까지만.
vault write demo-db/roles/dev-postgres \
   db_name=demo-db \
   creation_statements=&quot;CREATE ROLE \&quot;{{name}}\&quot; WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; \
      GRANT ALL PRIVILEGES ON DATABASE postgres TO \&quot;{{name}}\&quot;;&quot; \
   revocation_statements=&quot;REVOKE ALL ON DATABASE postgres FROM  \&quot;{{name}}\&quot;;&quot; \
   backend=demo-db \
   name=dev-postgres \
   default_ttl=&quot;1m&quot; \
   max_ttl=&quot;1m&quot;

# 정책 설정: DB 자격증명 읽기 권한
# demo-db/creds/dev-postgres 경로에 대한 read 권한 부여
# 추후 Kubernetes 서비스 어카운트(demo-dynamic-app)에 이 정책을 연결해서 자격증명 요청 가능
vault policy write demo-auth-policy-db - &amp;lt;&amp;lt;EOF
path &quot;demo-db/creds/dev-postgres&quot; {
   capabilities = [&quot;read&quot;]
}
EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b59f42e90786c63e15&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step7. &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Transit Secret Engine 설정 + VSO 연동 Role 구성 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;- &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/vso/sources/vault#vault-client-cache&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; , &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/vso/sources/vault/client-cache&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Client-cache&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c238042bedec4f5db02b1f9&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;kubectl exec --stdin=true --tty=true vault-0 -n vault -- /bin/sh
----------------------------------------------------------------
# Transit Secret Engine 활성화
# transit 엔진을 demo-transit 경로로 활성화.
# 데이터를 저장하지 않고 암복호화 기능만 제공하는 Vault의 기능
# 클라이언트 캐시는 리더십 변경 시에도 Vault 토큰 및 동적 비밀 임대를 계속 추적하고 갱신할 수 있으므로 원활한 업그레이드를 지원합니다
## Vault 서버에 클라이언트 캐시를 저장하고 암호화할 수 있습니다.
## Vault Dynamic Secret을 사용하는 경우 클라이언트 캐시를 영구적으로 저장하고 암호화하는 것이 좋습니다.
## 이렇게 하면 재시작 및 업그레이드를 통해 Dynamic Secret 임대가 유지됩니다.
vault secrets enable -path=demo-transit transit
vault secrets list -detailed

# vso-client-cache라는 키를 생성
# 이 키는 VSO가 암복호화 시 사용할 암호화 키 역할
vault write -force demo-transit/keys/vso-client-cache

# vso-client-cache 키에 대해 암호화(encrypt), 복호화(decrypt)를 허용하는 정책 생성
vault policy write demo-auth-policy-operator - &amp;lt;&amp;lt;EOF
path &quot;demo-transit/encrypt/vso-client-cache&quot; {
   capabilities = [&quot;create&quot;, &quot;update&quot;]
}
path &quot;demo-transit/decrypt/vso-client-cache&quot; {
   capabilities = [&quot;create&quot;, &quot;update&quot;]
}
EOF

# Vault Secrets Operator가 사용하는 ServiceAccount에 위 정책을 바인딩
# vso가 Vault에 로그인할 때 사용할 수 있는 JWT 기반 Role 설정
# 해당 Role을 통해 Operator는 Transit 엔진을 이용한 암복호화 API 호출 가능
vault write auth/k8s-auth-mount/role/auth-role-operator \
   bound_service_account_names=vault-secrets-operator-controller-manager \
   bound_service_account_namespaces=vault-secrets-operator-system \
   token_ttl=0 \
   token_period=120 \
   token_policies=demo-auth-policy-operator \
   audience=vault
   
vault read auth/k8s-auth-mount/role/auth-role-operator
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23804eb2c6d2e6c017180b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23800b9c4afa27ab0c96a2&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step8. 샘플 애플리케이션 YAML 작성 및 배포&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23808b9f43d68de50694fe&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;demo-ns&lt;/span&gt; 네임스페이스 생성&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c238010abf4d056aa3aa3f5&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;kubectl create ns demo-ns
mkdir vso-dynamic
cd vso-dynamic&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380bfa476d08ea4b42ab6&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;vault-auth-dynamic.yaml&lt;/code&gt; : &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238032bacbc8fe3414e09e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;앱이 Vault에 인증하기 위한 ServiceAccount 및 VaultAuth 리소스&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c238073897aeda864f1a9f4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Vault에서 발급한 동적 PostgreSQL 크레덴셜을 얻기 위해 반드시 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380a3b721c4e68811e4a0&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;---
# vault-auth-dynamic.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: demo-ns
  name: demo-dynamic-app
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultAuth
metadata:
  name: dynamic-auth
  namespace: demo-ns
spec:
  method: kubernetes
  mount: k8s-auth-mount
  kubernetes:
    role: auth-role
    serviceAccount: demo-dynamic-app
    audiences:
      - vault&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23802dbe65f2bcdcee61ce&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;app-secret.yaml&lt;/code&gt; : &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380f89dcade4148255afc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Spring App에서 PostgreSQL에 접속할 때 사용할 해당 시크릿에 username/password을 동적으로 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c238013b15fc31d012eab63&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;---
# app-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: vso-db-demo
  namespace: demo-ns&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23807983f7faa0979f70e6&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;vault-dynamic-secret.yaml&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380fca3c0cafb86ad4ab8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Vault에서 동적으로 PostgreSQL 접속정보 생성하고 K8s Secret에 저장&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23807e89f1d014ee0b5ded&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;생성된 Secret(vso-db-demo)은 앱에서 환경 변수(env)로 사용&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380b79369d6c16a9ee6fe&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션에서 Dynamic Reloading을 지원하지 않을 경우 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: inherit; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;rolloutRestartTargets&lt;/code&gt;&lt;/span&gt; 을 사용하여 애플리케이션을 재배포하여 새로 업데이트된 시크릿을 사용하도록 할 수 있음&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380ccb916edab1fa14075&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: inherit; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;refreshAfter&lt;/code&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt; 설정을 통해 VSO가 소스 시크릿 데이터를 동기화 하는 주기 설정가능 - &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/platform/k8s/vso/api-reference#vaultdynamicsecretspec&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt; &amp;rarr; Event Notification 기능을 통해 변경이 있을 경우 즉시 반영할 수도 있음 - &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-default);&quot; class=&quot;highlighted-color color-default&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://developer.hashicorp.com/vault/docs/concepts/events&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c23807d982ec194244b3751&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;---
# vault-dynamic-secret.yaml
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultDynamicSecret
metadata:
  name: vso-db-demo
  namespace: demo-ns
spec:
  refreshAfter: 25s
  mount: demo-db
  path: creds/dev-postgres
  destination:
    name: vso-db-demo
    create: true
    overwrite: true
  vaultAuthRef: dynamic-auth
  rolloutRestartTargets:
  - kind: Deployment
    name: vaultdemo&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238087a569d22bd953663d&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;app-spring-deploy.yaml&lt;/code&gt; : &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380d9bbb1e92bb43d5284&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;DB 접속 테스트를 위한 Spring App &amp;rarr;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c23805fac21d440b29e8bd6&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;---
# app-spring-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: vaultdemo
  namespace: demo-ns
  labels:
    app: vaultdemo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: vaultdemo
  template:
    metadata:
      labels:
        app: vaultdemo
    spec:
      volumes:
        - name: secrets
          secret:
            secretName: &quot;vso-db-demo&quot;
      containers:
        - name: vaultdemo
          image: hyungwookhub/vso-spring-demo:v5
          imagePullPolicy: IfNotPresent
          env:
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: &quot;vso-db-demo&quot;
                  key: password
            - name: DB_USERNAME
              valueFrom:
                secretKeyRef:
                  name: &quot;vso-db-demo&quot;
                  key: username
            - name: DB_HOST
              value: &quot;postgres-postgresql.postgres.svc.cluster.local&quot;
            - name: DB_PORT
              value: &quot;5432&quot;
            - name: DB_NAME
              value: &quot;postgres&quot;
          ports:
            - containerPort: 8088
          volumeMounts:
            - name: secrets
              mountPath: /etc/secrets
              readOnly: true
---
apiVersion: v1
kind: Service
metadata:
  name: vaultdemo
  namespace: demo-ns
spec:
  ports:
    - name: vaultdemo
      port: 8088         
      targetPort: 8088 
      nodePort: 30003
  selector:
    app: vaultdemo
  type: NodePort&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c23804b836ec8369695ada7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션 배포 : &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;kubectl apply -f .&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380749456d0b0997f8c66&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step9. 동작확인(UI) : &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;postgres-postgresql.postgres.svc&lt;/code&gt; , db는 &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;postgres&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380db8fc9e8a1c95e0d0f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://localhost:30003/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;localhost:30003&lt;/a&gt; 접속 후 K8s Secrets에 생성된 username, password 값으로 연결 테스트&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380ceb2bae63c0b8803ed&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ccf05019-e04d-49cc-9f78-f1867c1303e3/CleanShot_2025-04-10_at_17.49.02/w=1080,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ccf05019-e04d-49cc-9f78-f1867c1303e3/CleanShot_2025-04-10_at_17.49.02/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/ccf05019-e04d-49cc-9f78-f1867c1303e3/CleanShot_2025-04-10_at_17.49.02/w=1080,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;480&quot; height=&quot;615.266757865937&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23801f8db5e46cc3692dfc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23809d969fd018d432e7fa&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;Step10. 동작확인(CLI)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c238089a508e05d4b220606&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 스크릿이 변경되고, 적용을 위해서 파드가 42~45초 사이로 재생성됨
while true; do kubectl get pod -n demo-ns ; echo; kubectl view-secret -n demo-ns vso-db-demo --all; date; sleep 30 ; echo ; done 
...
NAME                         READY   STATUS    RESTARTS   AGE
vaultdemo-559494db6f-jw568   1/1     Running   0          42s

_raw='{&quot;password&quot;:&quot;fv6wQbr7O-VpbVHAt2nO&quot;,&quot;username&quot;:&quot;v-k8s-auth-dev-post-BfAGdVGRKRuriTjwnzVm-1744451233&quot;}'
password='fv6wQbr7O-VpbVHAt2nO'
username='v-k8s-auth-dev-post-BfAGdVGRKRuriTjwnzVm-1744451233'
Sat Apr 12 18:47:55 KST 2025

NAME                         READY   STATUS    RESTARTS   AGE
vaultdemo-559494db6f-jw568   1/1     Running   0          43s

_raw='{&quot;password&quot;:&quot;fv6wQbr7O-VpbVHAt2nO&quot;,&quot;username&quot;:&quot;v-k8s-auth-dev-post-BfAGdVGRKRuriTjwnzVm-1744451233&quot;}'
password='fv6wQbr7O-VpbVHAt2nO'
username='v-k8s-auth-dev-post-BfAGdVGRKRuriTjwnzVm-1744451233'
Sat Apr 12 18:47:56 KST 2025

NAME                         READY   STATUS              RESTARTS   AGE
vaultdemo-559494db6f-jw568   1/1     Running             0          45s
vaultdemo-65f9fc7c7-vjrcg    0/1     ContainerCreating   0          1s

_raw='{&quot;password&quot;:&quot;z--6WK-9OsWHxtEyxjl3&quot;,&quot;username&quot;:&quot;v-k8s-auth-dev-post-jMSezyOc1CxcNag59yky-1744451277&quot;}'
password='z--6WK-9OsWHxtEyxjl3'
username='v-k8s-auth-dev-post-jMSezyOc1CxcNag59yky-1744451277'
Sat Apr 12 18:47:58 KST 2025
...

# 만약 위의 secret이 변경되고 적용을 위해서 pod가 재생성되는 주기를 길게 하고 싶다면,
# DB 사용자 동적 생성 Role에서 ttl을 아래와 같이 수정하면 된다.
# 해당 Role 사용 시 Vault가 동적으로 사용자 계정과 비밀번호를 생성 하고 TTL마다 자동적으로 갱신하기 떄문에!!
# TTL은 생성된 자격증명의 유효 시간 (30초~10분)
## 아래와 같이 수정하면
## default_ttl=&quot;1m&quot; / max_ttl=&quot;5m&quot; : 기본 1분만 유효합니다. 갱신을 안 하면 5분 후 자동 만료 (계정도 자동 삭제).
vault write demo-db/roles/dev-postgres \
   db_name=demo-db \
   creation_statements=&quot;CREATE ROLE \&quot;{{name}}\&quot; WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; \
      GRANT ALL PRIVILEGES ON DATABASE postgres TO \&quot;{{name}}\&quot;;&quot; \
   revocation_statements=&quot;REVOKE ALL ON DATABASE postgres FROM  \&quot;{{name}}\&quot;;&quot; \
   backend=demo-db \
   name=dev-postgres \
   default_ttl=&quot;1m&quot; \
   max_ttl=&quot;5m&quot;

# 아래 동작처럼 최대 4분 30초 정도까지 같은 secret을 사용한다.
while true; do kubectl get pod -n demo-ns ; echo; kubectl view-secret -n demo-ns vso-db-demo --all; date; sleep 1 ; echo ; done 

NAME                        READY   STATUS    RESTARTS   AGE
vaultdemo-f7c5d6b7d-rwvqp   1/1     Running   0          4m21s

_raw='{&quot;password&quot;:&quot;uZwegj2lw-HsIsyE-TeQ&quot;,&quot;username&quot;:&quot;v-k8s-auth-dev-post-coEagFro4iP9WSJNp4Ek-1744450286&quot;}'
password='uZwegj2lw-HsIsyE-TeQ'
username='v-k8s-auth-dev-post-coEagFro4iP9WSJNp4Ek-1744450286'
Sat Apr 12 18:35:47 KST 2025

NAME                        READY   STATUS    RESTARTS   AGE
vaultdemo-f7c5d6b7d-rwvqp   1/1     Running   0          4m22s

_raw='{&quot;password&quot;:&quot;uZwegj2lw-HsIsyE-TeQ&quot;,&quot;username&quot;:&quot;v-k8s-auth-dev-post-coEagFro4iP9WSJNp4Ek-1744450286&quot;}'
password='uZwegj2lw-HsIsyE-TeQ'
username='v-k8s-auth-dev-post-coEagFro4iP9WSJNp4Ek-1744450286'
Sat Apr 12 18:35:48 KST 2025

NAME                         READY   STATUS              RESTARTS   AGE
vaultdemo-6bff8f9b74-7x5qf   0/1     ContainerCreating   0          1s
vaultdemo-f7c5d6b7d-rwvqp    1/1     Running             0          4m23s
...

# 실제 postgresql 에 사용자 정보 확인 : 계속 추가되고 있음..
kubectl exec -it -n postgres postgres-postgresql-0 -- sh -c &quot;PGPASSWORD=secret-pass psql -U postgres -h localhost -c '\du'&quot;
                                                  List of roles
                      Role name                      |                         Attributes                         
-----------------------------------------------------+------------------------------------------------------------
 postgres                                            | Superuser, Create role, Create DB, Replication, Bypass RLS
 v-k8s-auth-dev-post-1kQf61zXMEn84Z1Bf8DX-1744449161 | Password valid until 2025-04-12 09:13:46+00
 v-k8s-auth-dev-post-1qw3jyZIEwUzpsY1gNCP-1744449116 | Password valid until 2025-04-12 09:13:01+00
 v-k8s-auth-dev-post-22iqnzn5QfoIB2Yybc6h-1744449290 | Password valid until 2025-04-12 09:15:55+00
 v-k8s-auth-dev-post-26Ospg823o9u8pMGnkWE-1744449895 | Password valid until 2025-04-12 09:26:00+00
 v-k8s-auth-dev-post-5l8roWsv9OFMl7aqNyuC-1744449072 | Password valid until 2025-04-12 09:12:17+00
 v-k8s-auth-dev-post-6iEacSDeIhKS3C4EeRlr-1744449853 | Password valid until 2025-04-12 09:25:18+00
 v-k8s-auth-dev-post-7rpNbjzsp9MucFjrJ7nI-1744449461 | Password valid until 2025-04-12 09:18:46+00
 v-k8s-auth-dev-post-9YeTsR3jWICkc9v9Vl9l-1744449591 | Password valid until 2025-04-12 09:20:56+00
 v-k8s-auth-dev-post-9ohPXw3YZlnkgpj827xH-1744450201 | Password valid until 2025-04-12 09:31:06+00
 v-k8s-auth-dev-post-AcPWt7isKrKfXNFpaHvm-1744449376 | Password valid until 2025-04-12 09:17:21+00
 v-k8s-auth-dev-post-BDdUDrT95AGy2BFfKWkW-1744449940 | Password valid until 2025-04-12 09:26:45+00
 v-k8s-auth-dev-post-DkJAhqwOTJGNj8JJjcAO-1744449028 | Password valid until 2025-04-12 09:11:33+00
 v-k8s-auth-dev-post-Dz4sZshOxk7ZVAHDhVw4-1744450548 | Password valid until 2025-04-12 09:40:53+00
 v-k8s-auth-dev-post-EyTNBS9mEojaBnB0FIXf-1744450242 | Password valid until 2025-04-12 09:31:47+00
 v-k8s-auth-dev-post-F2Wf5eQygtSRIdwFLCBA-1744449546 | Password valid until 2025-04-12 09:20:11+00
...


# 로그 확인
kubectl stern -n demo-ns -l app=vaultdemo
...

kubectl stern -n vault vault-0
...
vault-0 vault 2025-04-10T08:32:09.484Z [INFO]  expiration: revoked lease: lease_id=demo-db/creds/dev-postgres/Ph1sg8efnqssOU5FVIuAqhMW
vault-0 vault 2025-04-10T08:32:54.229Z [INFO]  expiration: revoked lease: lease_id=demo-db/creds/dev-postgres/XKkHZ65ZYLeILvo8GqWfE7F3
vault-0 vault 2025-04-10T08:33:36.804Z [INFO]  expiration: revoked lease: lease_id=demo-db/creds/dev-postgres/rk1KUFsV7SjZPNFsCqCHGZVx
...


# vault-secrets-operator 가 clientCachePersistenceModel 설정 적용 정보 확인 : 참고로 해당 파드가 재시작되지는 않음.
kubectl stern -n vault-secrets-operator-system -l app.kubernetes.io/name=vault-secrets-operator
...
vault-secrets-operator-controller-manager-7f67cd89fd-ds5jc manager {&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-12T08:25:16Z&quot;,&quot;logger&quot;:&quot;initCachingClientFactory&quot;,&quot;msg&quot;:&quot;Initializing the CachingClientFactory&quot;}
vault-secrets-operator-controller-manager-7f67cd89fd-ds5jc manager {&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-12T08:25:16Z&quot;,&quot;logger&quot;:&quot;setup&quot;,&quot;msg&quot;:&quot;Starting manager&quot;,&quot;gitVersion&quot;:&quot;0.10.0&quot;,&quot;gitCommit&quot;:&quot;aebf0c1c59485059a9ea6c58340fd406afe4cbef&quot;,&quot;gitTreeState&quot;:&quot;clean&quot;,&quot;buildDate&quot;:&quot;2025-03-04T22:22:24+0000&quot;,&quot;goVersion&quot;:&quot;go1.23.6&quot;,&quot;platform&quot;:&quot;linux/arm64&quot;,&quot;clientCachePersistenceModel&quot;:&quot;direct-encrypted&quot;,&quot;clientCacheSize&quot;:10000,&quot;backoffMultiplier&quot;:1.5,&quot;backoffMaxInterval&quot;:60,&quot;backoffMaxElapsedTime&quot;:0,&quot;backoffInitialInterval&quot;:5,&quot;backoffRandomizationFactor&quot;:0.5,&quot;globalTransformationOptions&quot;:&quot;&quot;,&quot;globalVaultAuthOptions&quot;:&quot;allow-default-globals&quot;}
...
vault-secrets-operator-controller-manager-7f67cd89fd-ds5jc manager {&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:&quot;2025-04-12T09:10:28Z&quot;,&quot;logger&quot;:&quot;lifetimeWatcher&quot;,&quot;msg&quot;:&quot;Starting&quot;,&quot;id&quot;:&quot;b65f02ff-d629-46f9-a86f-081a27fdc2c2&quot;,&quot;entityID&quot;:&quot;80d85315-6023-0e81-a1af-7aa053a1ca44&quot;,&quot;clientID&quot;:&quot;fcbea1e09f9cc64124845f2c898a39a3f6ec30619ede674dc01610ef1395cb05&quot;,&quot;cacheKey&quot;:&quot;kubernetes-996f6ebc5943cecdc4a118&quot;}...

# 암호화된 캐시 저장소 확인 : vso-cc-&amp;lt;auth method&amp;gt;
kubectl get secret -n vault-secrets-operator-system -l app.kubernetes.io/component=client-cache-storage 
NAME                                       TYPE     DATA   AGE
vso-cc-kubernetes-5aca8a85319d25f2b20f24   Opaque   2      31m

kubectl get secret -n vault-secrets-operator-system -l app.kubernetes.io/component=client-cache-storage -o yaml
...
  data:
    messageMAC: px4SelUKuVElPzlhEFq8nUhm9LdIlyRbZpr0LL2VzVQ=
    secret: eyJjaXBoZXJ0ZXh0IjoidmF1bHQ6djE6YUFiSHh4Q0ZoTjJrLytRM0ZZUmE4VU5KQXFkUXArTnN1YjFCRFpiMisxUVNZR3IrR0dGdm5VUTVrbFpOTldOamRHL01sV1FFYUdrZExjMUpSdWJRS2tZV2RBb0I3aHdOUFkyaU54cUxIOEhJSGhuTWJGdHhYdXBmR0tnRko0bUlndVFQVXpyaXZpYys2aVVNK1YzZnhyMmtUa1UzZVZIYTZZMEVrbC9xVkR4cUZxMkdaVmVLNXkzRlNsS1h4alhia0JDRW1RQkdyRXY3VTVxTVRNdTlDUHEvSGg3NHNRNlZEOTRPNG5zZk9Jd2dNUVovTVd2RXRuck1RSzdNTW5ZTGxGdGd0VTdsSTdkVnVOd0hsRkNCN0lFdjROazJZeUc0cWFVODQ3VTNUMGY3KzJ6eFd3Y3FUajV1L2txd1c3TmlPbHBuVEduYmNtSVJSemZZekRRMzZzdjl0RG1FdWpFZzdwdExVWEVybXU4L3N1RHcwS08zSlFUTVQrLy9xalEwb1lGaWRPVU56cm1GSjl4L2dRRG03U0FqcXRHQUV1dFdYYTA3MDQzRHcvK1NRUFpiZm5CdjdBYzd2L2ZFSmo4MjloOFBlQnRHUlZPVkZWNXIxUFVsWFBRZVc3MVl3VlZUVzVPZktpdEhPQ3NnODdqTjJ1dGJycHU5M01uOFJILzZMYWZ5cVNQc2FUZlUwYjFJUVdoQmFBTGU5QjQyWHkrdHF5RWNrLzBoUUhuditEK0kxK0l3RHFBR1BvUGdqZEZ6bTZua0FrRWpqZi9paWtBbnpZMk52ZlJJQnQwZHpOTVl1UFpIdHVwRWpydGw2czVDSHpUYVRhZXEya1ArL0c4U2x4V3hTdHRGUnVWMzA1MTZWNEI5TGV3OHlUR0U5SkhvS0gxZkk2SFdURHdZZkRlajloUFZBS1REOXBKMjJ1YkxTc2NiKzBGMTZvdDBQOFh4Yk5YVmd0YzhrSmczZ0g1ZS9MaHdxb25oZkpDNGRQWDBMTmZuTVVncXBQakRodHpzVjFkaTBaT21CU2JIRDlVWkx5NFlwODJuOTBLZ2o4UzRTbEEvR1ZNRVdvVTlINXhOejlQeEw1eDBaYUZmSUs2bEhXUW5YMFNyQlcweDc2RmhKWERDaGhQYzBYRkQxTk5XREZmbUFrUjdmUVpJUmZub3RSbW50RTBwOXdlOWNlQktCM0x6bHV5eVhFMFBaY1VDSzNJeFlUckNNWTVLdWk4Q1VaZ2dPcFI1bEhuS2kwMVpva3ZmRThPYUFiRFQ4QkRvWERjeVF6dGdJUGxYNmRCVktNZENnT0dZSmUrd3F1eGM4K0dDVk1VRWM1NFlWUmg2K2NKQTE3bldEWHhpWTE3elBkQkJOWjdHRHFqakRGaklRYU1JQ1hwRGVOUTRaSDZnN3QwPSIsImtleV92ZXJzaW9uIjoxfQ==
  immutable: true
...
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238018ae29ec4e9cac557b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c238027a486c8a2470358a0&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;5.7. PKI Secrets&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238059bb57c84c2e600e15&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;운영자가 단일 Vault PKI 시크릿을 단일 Kubernetes 시크릿으로 동기화하는 데 필요한 구성입니다.&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c23806bafdcfacd9b455031&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Ingress, mTLS, Webapp 등 PKI 인증서를 사용하는 애플리케이션에서 동적으로 변경된 PKI 인증서를 사용할 수 있도록 지원합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238005839cfbcd80635d69&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380938e36c79a4c98836b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;5.8. &lt;span style=&quot;box-sizing: border-box; background-color: var(--color-bg-yellow);&quot; class=&quot;highlighted-background bg-yellow&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &amp;nbsp;추가 학습자료&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c238003a365ea644e43c884&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://cert-manager.io/docs/configuration/vault/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Cert-Manager: Vault Issuers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c23809496d0e44666e272d6&quot; class=&quot;notion-column-list&quot; style=&quot;box-sizing: border-box; display: flex; flex-wrap: wrap;&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c238079a4d2d2cef728b6ff&quot; class=&quot;notion-column&quot; style=&quot;box-sizing: border-box; padding: 12px 0px; word-break: break-word; display: flex; flex-direction: column; width: calc((100% - var(--column-spacing) * 1) * 0.5);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380a9a6aafabac74a30cf&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: vault-issuer
  namespace: sandbox
spec:
  vault:
    path: pki_int/sign/example-dot-com
    server: https://vault.local
    caBundle: &amp;lt;base64 encoded CA Bundle PEM file&amp;gt;
    auth:
      ...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380329de0d2f80038e223&quot; class=&quot;notion-column&quot; style=&quot;box-sizing: border-box; padding: 12px 0px; word-break: break-word; display: flex; flex-direction: column; width: calc((100% - var(--column-spacing) * 1) * 0.5); margin-inline-start: var(--column-spacing);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380909ad6cff3586468a6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238099ae08d90dc21f7175&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380eaa6d4eecaa1e58a88&quot; class=&quot;notion-image align-center normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: center; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/984e567f-511f-4387-a42f-1c6b5a04c52c/image/w=3840,quality=90,fit=scale-down&quot; sizes=&quot;(max-width: 546px) 100vw, 50vw&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/984e567f-511f-4387-a42f-1c6b5a04c52c/image/w=384,quality=90,fit=scale-down 384w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/984e567f-511f-4387-a42f-1c6b5a04c52c/image/w=640,quality=90,fit=scale-down 640w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/984e567f-511f-4387-a42f-1c6b5a04c52c/image/w=750,quality=90,fit=scale-down 750w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/984e567f-511f-4387-a42f-1c6b5a04c52c/image/w=828,quality=90,fit=scale-down 828w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/984e567f-511f-4387-a42f-1c6b5a04c52c/image/w=1080,quality=90,fit=scale-down 1080w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/984e567f-511f-4387-a42f-1c6b5a04c52c/image/w=1200,quality=90,fit=scale-down 1200w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/984e567f-511f-4387-a42f-1c6b5a04c52c/image/w=1920,quality=90,fit=scale-down 1920w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/984e567f-511f-4387-a42f-1c6b5a04c52c/image/w=2048,quality=90,fit=scale-down 2048w, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/984e567f-511f-4387-a42f-1c6b5a04c52c/image/w=3840,quality=90,fit=scale-down 3840w&quot; alt=&quot;image&quot; width=&quot;305&quot; height=&quot;165&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23808ab5a9e8dafffef851&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380d29ab3cceaa36b999d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.redhat.com/en/blog/how-to-secure-cloud-native-applications-with-hashicorp-vault-and-cert-manager&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;How to Secure Cloud-Native Applications With HashiCorp Vault and Cert Manager&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c23801da942cd31fce9693f&quot; class=&quot;notion-image align-center normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: center; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii); color: transparent;&quot; src=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/78f6a2fc-258b-4875-99e3-ec1dec6e05a5/image/w=1080,quality=90,fit=scale-down&quot; srcset=&quot;https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/78f6a2fc-258b-4875-99e3-ec1dec6e05a5/image/w=640,quality=90,fit=scale-down 1x, https://images.spr.so/cdn-cgi/imagedelivery/j42No7y-dcokJuNgXeA0ig/78f6a2fc-258b-4875-99e3-ec1dec6e05a5/image/w=1080,quality=90,fit=scale-down 2x&quot; alt=&quot;image&quot; width=&quot;432&quot; height=&quot;310.15384615384613&quot; data-nimg=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>AWS</category>
      <author>ManMan</author>
      <guid isPermaLink="true">https://gylee815.tistory.com/27</guid>
      <comments>https://gylee815.tistory.com/27#entry27comment</comments>
      <pubDate>Sat, 12 Apr 2025 22:20:46 +0900</pubDate>
    </item>
    <item>
      <title>[IHOS 1기] 1주차 - Istio소개, 첫걸음</title>
      <link>https://gylee815.tistory.com/28</link>
      <description>&lt;div id=&quot;block-1d2b8b2c1c23809da9e3ceee7b84f717&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380fd84e6fc03653456a0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Service Mesh 소개&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23807da152db1012980f38&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1.1 속도를 높이며 마주하는 문제들&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380f2a252e38a19af61c6&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ACME&lt;/span&gt; 회사 K8S 도입 사례&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c23804aa5a9d11ce2da3b1c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/20abfed8-9924-49d7-9ad1-68df44d3fd37/CleanShot_2025-04-06_at_16.39.57.png?table=block&amp;amp;id=1d2b8b2c-1c23-804a-a5a9-d11ce2da3b1c&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=r8vS5ruR3RzkUs6RTW86bYZlNPORFjardZo3g8JsLxw&quot; alt=&quot;image&quot; width=&quot;608.9772338867188&quot; height=&quot;511.98086001642037&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23809e9193eed0fb31cab4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;문제 발생&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380a9850ddbb2da3aea57&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;서비스들의 요청 처리 시간이 매우 불규칙&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380eda860deebaaeb70bc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;배포를 자동화할 때 자동화된 테스트에서 잡히지 않은 버그가 발생&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380ffa564ee7ac3abfd0e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;팀 별 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다른 보안 정책 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;사용 : A팀(인증서, 개인 키), B팀(토큰, 서명 검증), C팀(방화벽 뒷단으로 별도 보안 없음)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c23808682a6db6028eb6986&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;해결 필요점 도출&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238062bb60c604fa8813f4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;장애가 격리 경계를 넘어 확산하는 것을 방지&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23804c9fbeeea296290de6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;환경 변화에 대응할 수 있는 애플리케이션/서비스 구축&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23805b92b5f1734ca11834&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;부분적 장애 상태에서도 동작할 수 있는 시스템 구축&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380dbb356f19af1adc375&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;끊임없이 변화하고 발전하는 전체 시스템의 상태 파악&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23804ea2a3e4666b884bbc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;시스템의 런타임 동작을 제어할 수 없는 문제&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238013b286dae882db5fa5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;공격 표면이 커짐에 따라 강력한 보안 구현하기&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23805d923fd485ec5cca5a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;시스템 변경의 위험성 낮추기&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380f3aff6c418d57063fa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;시스템의 구성 요소를 누가(무엇이) /언제 사용할 수 있는지 정책 강제&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380eb83fbf1e40989dbfb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380f2a4d6fc7d6bbf6102&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;1.1.1 클라우드 인프라는 신뢰할 수 없다&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380df9e64c0a9d00c9dd5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클라우드에서는 인프라가 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;일시적이며 간혹 사용할 수 없다는 가정&lt;/span&gt;&lt;/span&gt; 아래 앱을 구축해야 한다. 이런&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 일시성은 아키텍처에서 미리 고&lt;/span&gt;려해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23809db7d6e9309b468c36&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어, 고객 선호도를 관리하는 추천 서비스가 고객 서비스를 호출한다고 해보자.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238052a305f3eeaf35e542&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림에서 추천 서비스는 고객 서비스를 호출해 일부 고객 데이터를 업데이트 하는데, 메시지를 보낼 때 극심한 성능 저하를 경험한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380efbf56dc03084e9b17&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 성능 정하는 어떤 영향을 미치는가?&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23803e8f5ec6e37db5410b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;의존하는 다운스트림이 느리면 추천 서비스가 실패해 연쇄 장애를 야기하는 등 혼란을 일으킬 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238096a74ae0bb56f92a11&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 시나리오는 여러 이유로 일어날 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380d5b083e1034f4007b6&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/5c91660e-fed8-4b50-b0a7-3ec9427b86df/CleanShot_2025-04-06_at_16.48.10.png?table=block&amp;amp;id=1d2b8b2c-1c23-80d5-b083-e1034f4007b6&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=My6nPI7w_gte5pY1WWNllmGUk8FHdRWNNqNwRfm63fI&quot; alt=&quot;image&quot; width=&quot;658.9346313476562&quot; height=&quot;144.98561691261025&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380408b59e1d55fdd25f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;고객 서비스가 과부화돼 실행 속도가 느리다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380daaba4cce58309377e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;고객 서비스에 버그가 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23806ca1bbd12077e2503d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네트워크 방화벽이 트래픽을 느리게 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380858ae8ce9e931f39e4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네트워크가 혼잡해 트래픽이 느려지고 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380f59a0fc63212d2a8a0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네트워크에 하드웨어 오류가 발생해 트래픽을 다시 라우팅하고 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23801ba8fddfbdcf95e35f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;고객 서비스의 네트워크 카드 하드웨어에 오류가 발생했다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23800cba48c65132bb8a15&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23800084eae801e164efa5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;문제는 이것이 고객 서비스의 장애인지 여부를 추천 서비스가 구분할 수 없다는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238096bd90dde7fd5aeb5f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다시 말하지만&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;, 하드웨어 및 소프트웨어 구성 요소가 수백만 개에 달하는 클라우드 환경&lt;/span&gt;에서 이런 시나리오는 항상 일어난다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380f299ffe9209c346622&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380a8b82acbb0c6325775&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;1.1.2 서비스 상호작용을 복원력 있게 만들기&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380d193f4e9a4af7ad616&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;추천 서비스느 몇 가지를 시도할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23800b864ffecb2a130bb1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를테면 요청을 재시도할 수 있는데, 과부하 시나리오에서는 다운스트림에 문제를 더하기만 하는 꼴일 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238098a148ce4847b94b28&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;한편 요청을 재시도할 때는 이전 요청이 성공하지 못했다고 확신할 수 없다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380b08eb3f74d3a44faba&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이럴 때는 일정 시간 후에 요청을 만료시키고 오류를 던질 수도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238016868bf40beaaa6259&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 다른 가용 영역에 위치할 수 있는 다른 고객 서비스 인스턴스에 재시도할 수 도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380e1a57be617204ac6d1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;만약 고객 서비스가 이런 문제를 장기간 겪을 경우, 추천 서비스는 냉각 기간 동안 고객 서비스 호출을 완전히 멈출 수도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380cd8ae8dbc75a01a914&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 시나리오를 완화하고 예기치 않은 장애에 대해 애플리케이션 복원력을 높이는데 도움이 되는 몇 가지 패턴이 발전해왔다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238065a42ff403cfd792e3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클라이언트 측 로드 밸런싱 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Client-site load balancing&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238039aabadc4e0f56f485&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클라이언트에게 엔드포인트 목록을 제공하고 어떤 엔드포인트를 호출할지를 클라이언트가 결정하도록 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380c89b18ebeb6d1a2c25&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 디스커버리 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Service discovery&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23803bad2eefb41dd98175&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;특정 논리적 서비스의 주기적으로 갱신되는 정상 엔드포인트 목록을 찾는 매커니즘이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380b88ed1d7f5d5c4bd3b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서킷 브레이커 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Circuit breaking&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238083b84bc6f522dfa0d9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;오동작하는 것으로 보이는 서비스에 일정 시간 부하를 차단한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c23800d8d30d14dfc937e6a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;격벽 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Bulkheading&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238018bb2ee3aa2b41a4f8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 호출 시 클라이언트 리소스 사용량을 명시적 임계값으로 제한한다 (커넥션, 스레드, 세션 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380fd8307e0534e8432f1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;타임아웃 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Timeouts&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238096855efb6d20b7fce0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 호출 시 요청, 소켓, 활성 liveness 등에 시간 제한을 적용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380d4a046eec08e112ac0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;재시도 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Retries&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380c28ff8dbc6089f0ec1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실패한 요청을 재시도한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380af8c95f17de7567faa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;재시도 예산 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Retry budgets&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380dfa9a8c5ebf7cf3c56&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;재시도에 제한을 적용. 즉, 일정 기간의 재시도 횟수를 제한하는 것 (예. 10초 동안 호출의 50%까지만 재시도 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c23802bb1e2daeb7e216e06&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;데드라인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Deadlines&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23802ea36ecec554f2be78&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청에 응답 유효 기간을 지정한다. 데드라인을 벗어나면 요청 처리를 무시한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1d2b8b2c1c238081b239d69e794d06de&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&amp;rArr; 이런 유형의 패턴을 종합하면 &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션 네트워킹&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;으로 생각할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380b3b248d4b299d35591&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380f3b241d8b12b854d2f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;1.1.3 일어나고 있는 일 실시간으로 이해하기&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380ebb892dfab46de4bc2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어떤 서비스가 서로 통신하고 있는지, 일반적인 서비스 부하가 어떤 형태인지, 예상하는 오동작 failure 수는 어는 정도인지, 서비스 오동작 시 어떤 일이 일어나는지, 서비스 상태가 어떤지 등 서비스 아키텍처를 아는 것은 대단히 중요하다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380b88c86f7cf3653d219&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;새로운 코드나 설정을 배포해서 변화를 준다는 건 주요 메트릭에 부정적 영향을 미칠 수 있는 가능성을 도입하는 것이기도 하다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23805a893bd401affb4ead&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭, 로그, 트레이스&lt;/span&gt;로 시스템을 관찰하는 것은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 아키텍처 운영&lt;/span&gt;에서 매우 중요한 부분이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380f5a6dde024d4cd7e9d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380e6b864c96db9e9a363&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380ce9371da508af0e8bd&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1.2 이 과제를 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션 라이브러리&lt;/u&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;로 해결해보기&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380768059fc188ac7809e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380d68a40c33d0542d1c3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클라우드 환경에서 애플리케이션/서비스를 운영하는 방법을 최초로 알아낸 조직은 거대 인터넷 기업들이었고, 이 회사들은 모두가 사용해야 하는 일부 언어에 대한 라이브러리와 프레임워크를 구축하는 데 막대한 시간과 자원을 투자했고, 이는 클라우드 네이티브 아키텍처로 서비스를 운영할 때 생기는 문제를 해결하는 데 도움이 됐다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380b4936ccf2201dd0ab0&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23807f8c25c8c7e9074f99&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;구글은 stubby 같은 프레임워크를 구축했고,.. 등등 다음과 같은 클라우드 네이티브 문제를 처리한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23809b88e0d65355f04751&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Hystrix&amp;mdash;Circuit breaking and bulkheading&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380af9fa8e6d502f909c9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Ribbon&amp;mdash;Client-side load balancing&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380e0b33ac5307501f19e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Eureka&amp;mdash;Service registration and discovery&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380be96cff7b7125d7039&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Zuul&amp;mdash;Dynamic edge proxy&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23803a9e10fe4f786ba1ac&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380b5a051ee7dd1cc82cf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;라이브러리는 자바 런타임을 대상으로 했기 때문에 자바 프로젝트에서만 사용&lt;/span&gt;&lt;/span&gt;할 수 있었다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238015af58f7f9f803d9cd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이러한 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;라이브러리를 사용하려면 해당 라이브러리에 대한 애플리케이션 의존성을 만들고, 클래스 경로를 가져온 다음, 애플리케이션 코드에서 사용해야 했다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380c9bc64ee45cfa8575d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;NetflixOSS Hystrix 를 사용하는 다음 예제는 의존성 관리 시스템에 Hystrix 에 대한 의존성을 가져온다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23809193e7caf1039d9719&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;xml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
&amp;lt;groupId&amp;gt;com.netflix.hystrix&amp;lt;/groupId&amp;gt;
&amp;lt;artifactId&amp;gt;hystrix-core&amp;lt;/artifactId&amp;gt;
&amp;lt;version&amp;gt;x.y.z&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23803aa010e9b9d86a1347&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380668f47cc356f9a399a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Hystrix 를 사용하려면 명령어를 기본 Hystrix 클래스인 HystrixCommand 로 래핑 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;wrapping&lt;/span&gt; 해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380b4b244e4286927f4ac&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;scala&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;public class CommandHelloWorld extends HystrixCommand&amp;lt;String&amp;gt; {
    
    private final String name;

    public CommandHelloWorld(String name) {
        super(HystrixCommandGroupKey.Factory.asKey(&quot;ExampleGroup&quot;));
        this.name = name;
    }

    @Override
    protected String run() {
        // a real example would do work like a network call here
        return &quot;Hello &quot; + name + &quot;!&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238009946dcc2d4c962f7c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23803d8cd3ffafc99d3985&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;만약 코드에 복원력을 구축할 책임이 각 애플리케이션에 있다면, 이런 문제에 대한 처리를 분산해 중앙 병목을 제거할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380deb19ac4660241668e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;신뢰할 수 없는 클라우드 인프라에 대규모로 배포하는 경우, 이는 바람직한 시스템 특성이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238054a595cfe954ae003d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238020b9ecc5973037c411&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;1.2.1 애플리케이션 별 라이브러리의 단점&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380619ce2c8dc1c94b1d4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;새로운 도전 과제 1&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380c7b25ac9245d9b0eaf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;모든 애플리케이션에서 예상되는 가정과 관련됨.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380559444d227c2b3daf0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;만약 아키텍처에 새 서비스를 도입하려 한다면, 예를 들어 Hystrix를 사용하려면 자바나 JVM 기반 기술을 사용해야만한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380f3915ccdedddc5945e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서킷 브레이커와 로드 밸런싱은 보통 함께 동작하므로, 두 복원력 라이브러리를 함께 사용해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380f480dae00f4cde205e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;로드 밸런싱에 넷플릭스 Ribbon을 사용하고 싶다면, 서비스 엔드포인트 디스커버에 사용할 일종의 저장소가 필요한데, 이는 Eureka를 사용해야 한다는 의미일 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23802bb068fb64745ddf7c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 식으로 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;라이브러리를 사용하는 방법은, 시스템의 나머지 부분과 상호작용하는 프로토콜의 명확히 정의되지 않은 상태에서도 암묵적인 제약&lt;/span&gt;을 만들어 낸다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238064acd7fc7201c8827d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380a78db3cb8ee1c9445e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;새로운 도전 과제 2&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23800ba0c0de44d2105257&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스를 구현하려고&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt; 새로운 언어나 프레임워크를 도입&lt;/span&gt;하려고 할 때 발생한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380988bacf9d6ee24dff8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사용자 대면 API를 구현하는 데 NodeJS가 적합하다고 판단했지만, 나머지 아키텍처는 자바와 NetflixOS를 사용하고 있다고 해보자.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380b4bbf1df72081cade5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;당신은 복원력 패턴 구현용으로 다른 라이브러리 집합을 찾기로 할 수도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238002b010cbe18095ec3b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또는 relilient hystrixjs 와 같은 유사 패키지를 찾아볼 수 도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23800e8b60e7effe3cb64b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러고는 도입하려는 언어를 알아보고, 입증하고, 개발 스택에 도입해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380558f3fd04b1dd97dae&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이들 라이브러리 각각은 전제와 구현이 다를 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238000873edec52af394e5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;어떤 경우에는 각 프레임워크/언어 조합에 상응하는 유사 대체품을 찾지 못할 수도 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380e8a7d6e636233d4503&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;결국 어떤 언어에서는 부분적으로 구현&lt;/span&gt;하게 돼 전반적으로 구현이 일괄적이지 않을 수 있는데, 이는 장애 시나리오에서 원인을 추론하기 어렵게 만들어 장애를 숨기거나 확산시키는 원인이 될 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23801f8c0ee882ed7556a8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 서비스가 애플리케이션 네트워킹 관리 목적으로 동일한 라이브러리 집합을 구현하는 모습을 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380a2ad19c8cd15c0afae&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/95a6be6a-570d-489d-9a0d-963aa12acbc9/CleanShot_2025-04-06_at_17.30.56.png?table=block&amp;amp;id=1d2b8b2c-1c23-80a2-ad19-c8cd15c0afae&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=mvi-4l_Zr58pXg6SzP5XWfA6FyWae8ZgmmLIbGgIbKM&quot; alt=&quot;image&quot; width=&quot;576&quot; height=&quot;365.8631921824104&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380be961be9c701e554d8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23805f9c86d1f0cb651a1b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;새로운 도전 과제 3&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238007a89ec55328878576&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;여러 프로그래밍 언어와 프레임워크에서 라이브러리를 소수로 유지하려면 많은 훈련이 필요&lt;/span&gt;하며 제대로 하기가 매우 어렵다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380cb860af01891656d21&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;핵심은 모두 구현이 일관되고 올바르다는 점을 보장하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23801dbd77d1af006921f9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;하나의 차이만으로도 시스템의 예측 불가능성이 늘어난다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380948bf4e65b4ba2229a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;동시에 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;여러 서비스에 업데이트를 수행&lt;/span&gt;하는 것도 벅찬 일이 될 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380468026e6fc7b92276e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클라우드 아키텍처에서는 애플리케이션 네트워킹을 분산하는 것이 낫지만, 그로 인해&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt; 늘어나는 시스템의 제약과 운영 부담&lt;/span&gt;은 대부분의 조직에서 감당하기 어려울 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238040973cc9014fb351cd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;설령 도전에 나선다고 해도 올바르게 수행하기는 더욱 어렵다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380448386d037b7d866bc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션을 임베디드 라이브러리로 유지 관리하고 운영하는 데 막대한 오버헤드 비용을 치르지 않고도 분산화의 이점을 누릴 수 있는 방법이 있다면 어떨까?&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23809bbb1df9c84d138bb4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238080b0e0f234ee19e657&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380fea828c0d0737eff89&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1.3 이런 관심사&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;애플리케이션 네트워킹&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;를 인프라에 전가하기&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380988f2cf9dba228f520&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가기&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380a1a044fdd8e99c2411&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 기본적인 애플리케이션 네트워킹 문제는 특정 애플리케이션, 언어, 프레임워크만의 전유물이 아니다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380d6817ef2389e14ced7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;재시도, 타임아웃, 클라이언트 측 로드 밸런싱, 서킷 브레이킹&lt;/span&gt; 등이 애플리케이션 기능을 차별화하는 것도 아니다&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380cabd58d3ad6df2ae77&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이들이 서비스의 일부로 고려해야 하는 대단히 중요한 과제인 것은 맞지만, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;사용하기로 한 모든 언어마다 구현하려고 막대한 시간과 자원을 투자하는 것은 시간 낭비&lt;/span&gt;&lt;/span&gt;다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380c1ab9afc430d6a0fe2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://istio.io/latest/docs/examples/bookinfo/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/01ec6b91-eaee-463d-a732-c3208072fec5/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-80c1-ab9a-fc430d6a0fe2&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=Fkz42L7EaV3vkyuXMrli1-qqyhvYURUBsjCrZKuP9eY&quot; alt=&quot;https://istio.io/latest/docs/examples/bookinfo/&quot; width=&quot;661.9744262695312&quot; height=&quot;452.98250015120493&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380579434d099bed9331a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;우리가 진정으로 원하는 점은 이런 과제를 구현해 애플리케이션이 자체적으로 처리해야 하는 부담을 덜어주면서도 기술에 구애받지 않는 방법이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380d79708c4c937f2782d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380d3aadcc5aa316e3702&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1.3.1 애플케이션 인식 서비스 프록시&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380eab5fbe2a2f73c2b19&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;프록시를 사용하는 것은 이런 관심사를 인프라로 옮기는 방법 중 하나다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380ce85e4fb942a40071d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프록시&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;란 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;커넥션&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;을 다룰 수 있고 적절한 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;백엔드로 리다이렉트&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;할 수 있는 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;중간 인프라 구성 요소&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238033b0dbe92b978b93a0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;필요한 것은 애플리케이션을 인식할 수 있고 서비스를 대신해 애플리케이션 네트워킹을 수행할 수 있는 프록시다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23804d95def06e59e87211&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/1062851a-15e8-494c-9b77-a7f4967bb9ec/CleanShot_2025-04-06_at_17.44.21.png?table=block&amp;amp;id=1d2b8b2c-1c23-804d-95de-f06e59e87211&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=-GZackyrDqXdza9ZTBIvVoCJUEZOj70oFj_84tJDHcI&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;288.45283018867923&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238097a372ea4b501e89fc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380d0b740f9730992f31c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇게 하려면 서비스 프록시는 커넥션과 패킷을 이해하는 전통적 인프라 프록시와 달리 메시지와 요청 같은 애플리케이션 구조를 이해해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380e0a224ebe8253ef732&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 7계층 프록시가 필요&lt;/span&gt;&lt;/span&gt;하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380b8834ece6c0b0df3bb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380a5a9b4e6792e145b88&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1.3.2 엔보이 프록시 만나기&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238029b218d5252c8839ee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 Envoy&lt;/span&gt; 는 오픈소스 애플리케이션 수준 프록시이다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23800f8ef0fd1270ec3567&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;리프트에서 SOA 인프라의 일부로 개발됐으며, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;언어나 프레임워크에 명시적 의존성 없이도 재시도, 타임아웃, 서킷 브레이커, 클라이언트 측 로드 밸런싱, 서비스 디스커버리, 보안, 메트릭 수집&lt;/span&gt;&lt;/span&gt; 등의 네트워크 관심사를 구현할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380909e8fc3ae9607f07c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림에서 보듯이 엔보이는 이 모든 것을 애플리케이션 프로세스 외부에서 구현한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23802f974ce52ab13dee35&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/885f9bfe-3d8c-4f28-b357-cbd7cf4cdb8b/CleanShot_2025-04-06_at_17.53.02.png?table=block&amp;amp;id=1d2b8b2c-1c23-802f-974c-e52ab13dee35&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=iy2AJmJNOhQTwGUdmg92aOLrrGfHhttMa7VbBbOc_8A&quot; alt=&quot;image&quot; width=&quot;816&quot; height=&quot;204.57142857142856&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23802fa69dd6d6ca3c4199&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238060889df1d51900dd2d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이의 힘은 이런 애플리케이션 계층의 복원력 측면에서만 국한되지 않는다. 엔보이는 또한 초당 요청 수, 실패 횟수, 서킷 브레이커 이벤트와 같은 여려 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션 네트워킹 메트릭을 수집&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238031baa4dad5f94fc6ee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이를 사용하면 서비스 간에 어떤 일이 일어나고 있는지 자동으로 알 수 있게 되는데, 바로 여기가 예상치 못한 복잡성을 많이 발견하는 되는 곳이다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380df88a4e90937b61418&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 프록시&lt;/span&gt;는&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 서비스 아키텍처&lt;/span&gt;에서 공통적인&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 서비스 간 신뢰성과 관찰 가능성 문제를 해결 할 수 있는 기반&lt;/span&gt;이여, 이 기반을 토대로 이런 문제를 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션에서 인프라로 이동&lt;/span&gt;&lt;/span&gt;시킬수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380429788f635639c486c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380dd8d10e20cec30184e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션과 함께 서비스 프록시를 배포해 애플리케이션 외부에서 이런 기능들을 얻을 수 있지만, 세부적으로는 애플리케이션마다 다를 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238085b754e2a0c9d6d025&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 이 모델에서 애플리케이션이 시스템의 다른 부분과 통신하는 방법을 보여주는데, 요청을 엔보이로 먼저 보내고 나서 엔보이가 업스트림으로의 통신을 처리한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380069c1be44b0144a007&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/dbfda7f6-f142-43de-a35f-855b303288c0/CleanShot_2025-04-06_at_17.56.59.png?table=block&amp;amp;id=1d2b8b2c-1c23-8006-9c1b-e44b0144a007&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=6213kfkoAoyhEudcqL5HZkCBnXs1WPjaT8PTn1Mgdbw&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;429.3577981651376&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23808aa4c9c17fca8ca8ee&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238076a8c3f6ac386918cb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 서비스 프록시는&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 분산 트레이싱 스팬 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;span&lt;/span&gt;&lt;/span&gt;을 수집해 특정 요청이 수행한 모든 단계를 연결할 수 있으며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;각 단계의 소요 시간을 확인&lt;/span&gt;하고 시스템의 잠재적인 병목 현상이나 버그를 찾아 낼 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380998e01cbedec8f3690&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;모든 애플리케이션이 자신의 프록시를 거쳐 외부 세계와 대화하고 애플리케이션으로 들어오는 모든 트래픽이 프록시를 거치면, 애플리케이션 코드를 한 줄도 바꾸지 않고 애플리케이션에 대한 중요한 기능을 얻을 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238009a06ffb478a4081ed&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 프록시+애플리케이션 조합이 서비스 메시로 알려진 통신 버스의 토대가 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238013a944c060f1acc239&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238082a7cdf7ba713ac2a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 같은 서비스 프록시는 애플리케이션의 모든 인스턴스와 함께 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;단일 최소 단위&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;single atomic unit&lt;/span&gt; 로 배포할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380ad9c90f3556a9b8d31&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 쿠버네티스에서는 서비스 프록시와 애플리케이션 단일 파드로 함께 배포할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380b5ada7c49d3003e85b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 메인 애플리케이션 인스턴스를 보완하기 위해 프록시를 배포하는 사이드카 배포 패턴을 그리고 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23802bb13bc3325c8b47ec&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/9718f848-a51f-4540-b874-1a131f411872/CleanShot_2025-04-06_at_18.01.18.png?table=block&amp;amp;id=1d2b8b2c-1c23-802b-b13b-c3325c8b47ec&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=JW2_zDBFVNsOmUIJUmn4NZ5EfUtkAdhwhD0yTRfbGNE&quot; alt=&quot;image&quot; width=&quot;666.960205078125&quot; height=&quot;291.9825785349513&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238054b7bfd2cd6a8c38da&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380b4a1c8d9471366b3e4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23809eab35e643997e2b62&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238014b1f7edd99d97b707&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1.4 서비스 메시란 무엇인가?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380528d69ccbaa8da2f46&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;들어가기&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380a99270e6592e00132a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 같은 서비스 프록시는 클라우드 환경에서 동작하는 서비스 아키텍처에 중요한 기능을 추가하는 데 도움이 된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23804785fbc85ff28cb329&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;각 애플리케이션은 워크로드 목표를 감안해 프록시 동작 방식에 대해 자신만의 요구 사항이나 설정을 가질 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380238765de351a5fde44&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션과 서비스 수가 늘어남에 따라 많은 프록시를 설정하고 관리하는 것이 어려움 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238088b71fdc7dba03ccb7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 각 애플리케이션 인스턴스에 프록시를 배치하면, 원래는 애플리케이션 스스로가 수행했어야 하는 흥미로운 고급 기능을 구축할 기회가 생긴다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380f1a4defc82e25892db&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380039842e6ad86ada2db&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;서비스 메시&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238017830dfb070021c85c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 메시&lt;/span&gt;란 애플리케이션 대신 프로세스 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;외부에서 투명하게 네트워크 트래픽을 처리하는 분산형 애플리케이션 인프라&lt;/span&gt;&lt;/span&gt;를 말한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380f3aec8d33e9d78b300&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 서비스 프록시가 데이터 플레인을 형성하는 방식을 보여준다. 데이터 플레인은 모든 트래픽을 처리하고 관찰하는 곳이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23807f844fd563bda1cb5b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/e3f7274f-8d09-458d-95f1-0f33d2039972/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-807f-844f-d563bda1cb5b&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=AFvqwrOHHcbLk80PqFDLpBG_9cI0_3ytbJbF73lDFgU&quot; alt=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; width=&quot;768&quot; height=&quot;487.06321243523314&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380429de1db75f27419c3&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/08c8496a-c4ff-4093-bd5a-0c587f3e82e8/istio.png?table=block&amp;amp;id=1d2b8b2c-1c23-8042-9de1-db75f27419c3&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=-sa2ovtzd7SsBtKCKNb3G-N5Gv-nFZdvnLBytyTdoM4&quot; alt=&quot;image&quot; width=&quot;768&quot; height=&quot;436.93654266958424&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380a98f21ef3284ddd73d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238013bf57e808fe302e87&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 플레인&lt;/span&gt;은 메시를 거쳐가는 트래픽을 설정하고 보호하고 제어하는 책임을 맡는다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380a8902de0f82cd7723a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;데이터 플레인의 동작은 컨트롤 플레인이 설정한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380c8b3f8ff0924a3487f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인&lt;/span&gt;은 메시의 두뇌로, 운영자가 네트워크 동작을 조작할 수 있도록 API를 노출한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23807d8530d8bc0aa71ca9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;데이터 플레인과 컨트롤 플레인이 모여 모든 클라우드 네트워크 아키텍처에 필요한 다음과 같은 중요 기능을 제공한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23807fa691e23506eab2a9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 복원력&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380a18d69d96bde8cb54e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;관찰 가능성 신호&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23808c9896c578adddf8a3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽 제어 기능&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380b695d3e493f6d265d6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;보안&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380899413f09c23051649&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;정책 강제 Policy enforcement&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238024a8f6ce68588abae4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380bea2aaeb01c28fe25f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;기능&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380919e88e092a45e49a4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 메시는 재시도, 타임아웃, 서킷 브레이커 같은 기능을 구현해 서비스 통신이&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 장애에 복원력&lt;/span&gt;을 갖추게 만들 책임을 맡는다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380eb9698d34846a933ba&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 서비스 디스커버리, 적응형 및 영역 인식 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;zone-aware&lt;/span&gt; 로드 밸런싱, 헬스 체크 같은 기능을 처리함으로써 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;변화하는 인프라 토폴로지를 처리&lt;/span&gt;할 수도 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23802c8cffe3bc2edd5eb1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;모든 트래픽이 메시를 통과하므로 운영자는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트래픽을 명시적으로 제어&lt;/span&gt;하고 지시할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380d09f97cfce39b3b846&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽이 메시를 통과하므로 요청 급증, 지연 시간, 처리량, 장애 등과 같은 메트릭을 추적함으로써 네트워크 동작에 대한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;상세한 신호&lt;/span&gt;를 포착할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238029a3b4c86d5662972c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;텔레메트리&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;telemetry&lt;/span&gt; 를 활용해 시스템에서 어떤 일이 일어나고 있는지 그려낼 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380069709e3415834937e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마지막으로, 서비스 메시가 애플리케이션 간 네트워크 통신의 양쪽 끝을 제어하므로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;상호 인증&lt;/span&gt;을 사용한 전송 계층 암호화 같은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;강력한 보안&lt;/span&gt;을 적용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380d087dfd76e9f2c0b3a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;구체적으로는 TLS 프로토콜을 사용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238054ab5df75e51b416ba&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380c2b9becdd19b57e5eb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;정리&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380ca8b97de025f2e9f59&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 메시는&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 이 모든 기능을&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt; 애플리케이션 코드 변경이나 의존성 추가를 거의(혹은 전혀) 하지 않고도&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 서비스 운영자에게 제공&lt;/span&gt;&lt;/span&gt;한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23802e859fcc4e005113f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;일부 기능에서는 애플리케이션 코드와 약간의 협업이 필요하지만, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;크고 복잡한 라이브러리 의존성을 피할&lt;/span&gt; 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380d9aaa7f10a3a7eeb50&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 메시를 사용하면 애플리케이션을 구축하는 데&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 어떤 애플리케이션 프레임워크나 프로그래밍 언어를 사용했든지 상관없이 이런한 기능들이 일관되고 정확하게 구현&lt;/span&gt;되므로, 서비스 팀이 변화를 구현해 전달할 때 빠르고 안전하며 자신감 있게 움직일 수 있게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380308cb6cbf23a564208&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380e9920cd7a8d08b8713&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;1.5 이스티오 서비스 메시 소개&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380f8a007e7c361628b2c&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;들어가며 : &lt;i&gt;이스티오 istio 는 그리스어로 &amp;lsquo;돛&amp;rsquo;을 의미하며, k8s 항해 용어들과 잘 어울림.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238099bf38ee0682e43d69&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 서비스 메시의 오픈소스 구현체이며 구글, IBM, 리프트가 주도했다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380d883bdc2ad432e9eb9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 서비스 아키텍처에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;복원력과 관찰 가능성&lt;/span&gt;을 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;투명한 방식&lt;/span&gt;으로 추가하는 데 도움이 된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380509924cea2b25c9880&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오를 사용하면 애플리케이션은 자신이 서비스 메시의 일부임을 인지하지 않아도 된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238054ae47c1a0d4c45463&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션이 외부 세계와 의사소통할 때는 항상 이스티오가 애플리케이션 대신 네트워킹을 처리하기 때문이다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380de8fd2ef67534d1231&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 데이터 플레인은 엔보이 프록시를 사용하며, 서비스 프록시 인스턴스가 함께 배포되도록 애플리케이션을 구성하는 데 도움이 된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380fbab2fd04081964429&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 컨트롤 플에인은 최종 사용자/운영자용 API, 프록시용 설정 API, 보안 설정, 정책 선언 등을 제공하는 몇 가지 구성 요소로 이뤄져 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380e598e1e37bd83840a5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 본래 쿠버네티스에서 실행할 목적으로 구축됐지만, 배포 플랫폼에 구애받지 않는 관점으로 작성됐다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23801b9e06c12e963cffe2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;즉, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;쿠버네티스&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;오픈시프트&lt;/span&gt;와 같은 배포 플랫폼은 물론, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;가상머신&lt;/span&gt; 같은 기존 배포 환경에서도 이스티오 기반 서비스 메시를 사용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23803aa6c3e0f934eacaef&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23808e9973faa391ca5825&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;각 애플리케이션 인스턴스 옆에 서비스 프록시가 있으면 애플리케이션은 더 이상 서킷 브레이커, 시간 초과, 재시도, 서비스 디스커버리, 로드 밸런싱 등을 위해&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 언어별 복원력 라이브러리가 필요하지 않다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238016bdb8d1002dcb8d14&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 서비스 프록시는&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt; 메트릭 수집, 분산 트레이싱, 접근 제어&lt;/span&gt;도 처리한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380258205c00691157add&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 메시의 트래픽이 이스티오 서비스 프록시를 거쳐 흐르는 덕분에 이스티오는 각 애플리케이션에서 네트워킹 동작에 영향을 주고 지시할 수 있는 제어 지점을 가진다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238043bffde592ea4f460e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 통해 운영자는 트래픽 흐름을 제어하고 카나리 릴리즈, 다크 런치, 단계적 롤아웃, A/B 스타일 테스트와 같은 세밀한 릴리즈를 구현할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238019aee1eb8a00099e91&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/ae66e084-0e68-4621-8249-396909cd98d0/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-8019-aee1-eb8a00099e91&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=uGxb1n1SimycrYcKZOJqv3TdQ2I_GOO0yIzWT-BowYY&quot; alt=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; width=&quot;864&quot; height=&quot;590.6796116504854&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23804d8700e30837a29cd7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽은 이스티오 인그레스 게이트웨이를 통해 메시 외부의 클라이언트에서 클러스터로 들어온다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380889cdcd984b6962334&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽이 쇼핑 카트 서비스로 이동한다. 트래픽은 먼저 해당 서비스 프록시를 통과한다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238087b86cc2d8ec7b1789&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 프록시는 서비스에 타임아웃, 메트릭 수집, 보안 강제 등을 적용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380259fe3d96708ea3da1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청이 다양한 서비스를 거치므로, 이스티오의 서비스 프록시는 다양한 단계에서 요청을 가로채고 라우팅 결정을 내릴 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238077899bc768ea07ab1b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인 istiod&lt;/span&gt;&lt;/span&gt; 는 라우팅, 보안, 텔레메트릭 수집, 복원력을 처리하는 이스티오 프록시를 설정하는 데 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238072a0ffd435cd74fba5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;요청 메트릭은 주기적으로 다양한 수집 서비스로 전송된다. 분산 트레이싱 스팬은 트레이싱 저장소로 전송돼 시스템을 거치는 요청의 경로 및 지연 시간을 추후에 추적하는 용도로 사용할 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380098494c941b94e447f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23809fa708dc6df07181df&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;어떤 서비스 기반 아키텍처에서도 중요한 요구 사항은 보안이다. 이스티오는 기본적으로&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 보안이 활성화&lt;/span&gt;돼 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380559cf3ca2102a893fa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 애플리케이션 네트워킹 경로의 양 끝단을 제어하는 덕분에 기본적으로 트래픽을 투명하게 암호화 할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380e591abdb6f3582de2c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;서비스가 mTLS를 바로 사용할 수 있도록 키 및 인증서 발급, 설치, 로테이션을 관리&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238091b13cdbe3a6b83a54&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;워크로드에 ID를 부여&lt;/span&gt;하고 이를 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;인증서에 포함&lt;/span&gt;시킬 수 있다. 또한 ID를 사용해 강력한 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;접근 제어 정책을 구현&lt;/span&gt;&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23809eb08dfb14086a3b8a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380c5bb15d925c79e0759&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마지막으로, 이스티오를 사용하면 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;할당량, 속도 제한, 조직 정책&lt;/span&gt;&lt;/span&gt;을 구현할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380e4b0e2cf4e039cddd2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 정책 강제 policy enforcement 를 사용하면, 어떤 서비스가 서로 상호작용할 수 있고 어떤 서비스가 상호작용할수 없는지에 대해 아주 세밀한 규칙을 만들 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238028ab52f7bea09a85e4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23801397d2f3c971e04ab5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380eaa97ceb1aedf2736e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380a29a0ec171c42be771&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;1.5.1 서비스 메시와 엔터프라이즈 서비스 버스 ESB 의 관계&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238074a222d5c704758399&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 지향 아키텍처 SOA 시대의 엔터프라이즈 서비스 버스 ESB는 최소한 정신적으로는 서비스 메시와 유사하다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23803d8fd3c717d635f444&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;SOA 초기에 ESB가 본래 묘사됐던 방식을 살펴보면 다음과 같이 상당히 비슷한 표현을 볼 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23806bbf92d99165cb509b&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: var(--color-bg-gray-light); display: flex; margin-top: 2px; margin-bottom: 4px; border-color: var(--color-bg-gray-light); overflow: hidden; padding: var(--callout-padding); border-radius: var(--callout-border-radii); box-shadow: var(--callout-shadow);&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; display: var(--callout-icon-display); position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: var(--color-text-default-light);&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 959.047px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1d2b8b2c1c23808fb809de9ba0c8705e&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;The enterprise service bus (ESB) is a silent partner in the SOA logical architecture. Its presence in the architecture is transparent to the services of your SOA application. However, the presence of an ESB is fundamental to simplifying the task of invoking services&amp;mdash;making the use of services wherever they are needed, independent of the details of locating those services and transporting service requests across the network to invoke those services wherever they reside within your enterprise. (&lt;/i&gt;&lt;i&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;http://mng.bz/5K7D&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;http://mng.bz/5K7D&lt;/a&gt;&lt;/i&gt;&lt;i&gt;)&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23804eaae4d861c3923e1c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238084b7fae395c7b16234&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;위 설명에서 ESB를 &amp;lsquo;과묵한 파트너&amp;rsquo;로 가정하고 있는데, 이는 애플리케이션이 ESB를 알지 못함을 의미한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238005b6aec151c3e03347&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 메시에서도 비슷한 동작을 기대한다. 서비스 메시는 애플리케이션에게 투명해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380ea841ef8cd2263c2db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 ESB는 &amp;lsquo;서비스 호출 작업을 단순하게 만드는 데 핵심적인 요소&amp;rsquo;라고 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380b6946cc6f411fbd26b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ESB의 경우 프로토콜 변환, 메시지 변환, 콘텐츠 기반 라우팅을 포함한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380aa8ebdf9b962fd97b2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 메시는 EBS가 하던 모든 일을 맡지는 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380eaaf16d6b114d3bff7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 메시는 재시도, 타임아웃, 서킷 브레이커로 서비스 복원력을 제공하고, 이에 더해 서비스 디스커버리와 로드 밸런싱 같은 서비스를 제공한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238077a8afca00e01f21aa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;전반적으로 서비스 메시와 ESB에는 몇가지 중요한 차이점이 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380599732e35206faca33&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ESB는 기업 내에서 서비스 통합을 관리하는 새로운 구조를 조직에 도입했는데, 이 구조는 결국 격리된 시스템, 즉 사일로 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;silo&lt;/span&gt; 가 됐다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23804cb2b3cf1df514c59f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ESB는 매우 중앙화된 배포/구현이었다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380338764deddab753a70&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ESB는 애플리케이션 네트워킹과 서비스 중재 문제를 혼합했다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23809b9c78ffac76f9b57e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ESB는 복잡한 독점 벤더 소프트웨어를 기반으로 하는 경우가 많았다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c23801faf3bcf29cb232343&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 ESB가 애플리케이션을 통합하는 방법을 보여준다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23806f81e6cea38bfdf5ed&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;ESB는 중앙에 위치하고 애플리케이션 비즈니스 로직을 애플리케이션 라우팅,변환,중재와 결합했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238018839ae2e4e79cf425&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/4f15b501-a19d-4be2-8489-57ac3059c314/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-8018-839a-e2e4e79cf425&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=gvQNGuEE1sl2EI2Ag8WZzHwu6FbUiXwcuQeFO9YYgus&quot; alt=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; width=&quot;576&quot; height=&quot;415.22637362637363&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23806fb342fd3cbfdbc58a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23801f87d3cb7ceabcd5be&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 메시의 역할은 오직 애플리케이션 네트워킹 문제에만 해당&lt;/span&gt;&lt;/span&gt;된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380a69759f36962fc5129&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;복잡한 비즈니스 변환, 비즈니스 프로세스 오케스트레이션, 프로세스 예외, 서비스 오케스트레이션 등은 서비스 메시의 일이 아니다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238063b530e854a72d86cf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 서비스 메시의 데이트 플레인은 프록시를 애플리케이션에 붙이는 형태로 고도로 분산된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23800391c7e4c0a8a24066&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이를 통해 ESB 아키텍처에서 자주 나타나는 단일 장애 지점 혹은 병목 지점을 제거한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380f3bd7feb2883dc5f0e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마지막으로 운영자와 서비스 팀 모두 서비스 수준 목표 SLO를 수립하고 이를 지원하도록 서비스 메시를 구성할 책임이 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380aeafe0ffbbc9965c82&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다른 시스템과 통합할 책임은 더 이상 일부 중앙집중식 팀의 영역이 아니다. 모든 서비스 개발자가 그 책임을 함께 진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238015bbcac1e3b006bf76&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23801b8af0c7d5ff9d581b&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;1.5.2&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 서비스 메시&lt;/span&gt;와&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; API 게이트웨이&lt;/span&gt;의 관계&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23800689e0f7b1ed759b6f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오와 서비스 메시 기술은 API 게이트웨이와도 몇 가지 유사점과 차이점을 공유한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380fea6bbfbc24840ab20&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;API 게이트웨이 인프라는 API 관리 제품군에서 조직의 공개 API에 외부에서 접근할 수 있는 엔드포인트를 제공하는 데 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380e7a4ecdcffbdc5fb5a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;API 게이트웨이의 역할은 크게 두 가지다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238058b44dd30aa297d46c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;첫 번째는 공개 API에 보안, 속도 제한, 할당량 관리, 메트릭 수집 기능을 제공하는 것이고,&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238079bc6af92cf9640695&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;두 번째는 API 계획 명세, 사용자 등록, 요금 청구와 기타 운영 문제를 포함하는 전반적 API 관리 솔루션에 공개 API를 연결하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23809a952ec52787d628b7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;API 게이트웨이 아키텍처는 매우 다양하지만, 대부분 아키텍처의 경계에서 공개 API를 노출하는 데 사용됐다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380f0b989f162a9b9cbc3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 보안, 정책, 메트릭 수집을 중앙화하기 위해 내부 API에도 사용돼 왔다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380929c29f758071e0fb8&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇지만 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;API 게이트웨이는 트래픽이 흐르는 중앙집중 시스템을 만들기 때문에 ESB와 메시징 버스에서 설명했듯 병목 현상의 원인이&lt;/span&gt; 될 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23804dbf6ed40f5f895321&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380faa2f7f1e735720766&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 내부 API에 API 게이트웨이를 사용할 때 서비스 간에 모든 내부 트래픽이 어떻게 API 게이트웨이를 거쳐가는지 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380878ee1fd18c10c3656&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/206dc3f0-59f6-4f52-826f-55b6c2c591b1/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-8087-8ee1-fd18c10c3656&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=h9_Lw9d5VbIAg1aubKjqeb5FkdM8wT4TiBDJ1H3Ai9c&quot; alt=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; width=&quot;672&quot; height=&quot;469.8472385428907&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380baa564df739c73e0ca&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23808597b5ec768e89d428&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;그래프의 모든 서비스에서 홉 hop 이 두 번을 거치게 된다&lt;/span&gt;. 한번은 게이트웨이로 향하고, 한 번은 실제 서비스로 향하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23805e88dbd9f3f3614482&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이는 네트워크 오버헤드와 지연 시간 뿐 아니라 보안에도 영향을 미친다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23803ab9a4d6a91471842d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 다중 홉 아키텍처에서는 애플리케이션 관여 없이 API 게이트웨이가 단독으로 전송 매커니즘을 보호할 수 없다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380eabf5ef8ca5ace4827&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그리고 API 게이트웨이는 보통 서킷 브레이커나 격벽 같은 복원력 기능을 구현하지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380078b1bc5e44eb73c60&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238035bee8c0f7e79d3369&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 메시에서 프록시는 서비스와 함께 배치되므로 추가 홉을 거치지 않는다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380e18a35cee5f4dc8d58&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;또한 서비스 메시는 탈중앙적이므로, 각 에플리케이션은 자신의 프록시를 자신의 워크로드에 맞게 설정할 수 있고 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;시끄러운 이웃&lt;/span&gt; noisy neithbor 시나리오에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;영향을 받지 않는다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380768301f7c214a3b183&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;각 프록시는 짝 애플리케이션 인스턴스와 함께 있으므로, 애플리케이션이 알아차리거나 적극적으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;참여할 필요 없이 전송 매커니즘을 처음부터 끝까지 end-to-end 보호&lt;/span&gt;할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380d9a45eccb5fb21c9ac&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380dcb180d123ccb31e2e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 서비스 프록시가 API 게이트웨이 기능을 구현하고 강제하는 장소가 되는 모습을 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380568b1df015d4b1a6bb&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/84c1f35a-4f3a-47d9-bf49-c9cb8ae36744/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-8056-8b1d-f015d4b1a6bb&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=BKp2g2zKvAJy_yR2DqWOWcZVunEkgGXcF84EmE_aFjU&quot; alt=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; width=&quot;672&quot; height=&quot;401.40600667408233&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238023bb3ec2ec2d47ae64&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380098eaef968b1a3cd24&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 같은 서비스 메시 기술이 계속 성숙하게 되면, API 관리가 서비스 메시 위에 구축되고 전문 API 게이트웨이 프록시가 필요하지 않게 될 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380119abfe9094b0612d4&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23807fb1e3ef3b8c636022&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;1.5.3 마이크로서비스가 아닌 아키텍처에도 이스티오를 사용할 수 있는가?&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380efb145c70324bdecdc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 힘이 빛을 발하는 것은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 개수와 서비스 사이의 연결이 많고 네트워크가 신뢰할 수 없는 클라우드 인프라 위에 있으며 이런 구조가 여러 클러스터, 클라우드, 데이터센터에 걸쳐 확장되는 상황&lt;/span&gt;에서다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23808b89e7feca6f227f19&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;게다가 이스티오가 애플리케이션 프로세스 외부에서 작동되므로, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기존 레거시 혹은 브라운필드 환경&lt;/span&gt;에서 배포해 메시에 통합할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23803e80d9e44f6a54cc11&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오에는 어떤 서비스와 통신할 수 있는지 강제하는 정책이 있는데, 이 기능은&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 온프레미스와 퍼블릭 클라우드&lt;/span&gt;를 모두 사용하는 하이브리드 클라우드 구조에서 대단히 유용해진다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380459cbae1d9ff8264e5&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오와 애플리케이션 둘 다 서킷 브레이커 같은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기능이 중복으로 구현&lt;/span&gt;했더라도, 더 제한적인 정책이 효과를 발휘해 모든 게 정상적으로 잘 작동할 것으므로 안심 할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23800e82b3efc60819fd67&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380a8aff5c4cd540b5791&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;1.5.4 이스티오가 분산 아키텍처에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;적합&lt;/span&gt;한 경우&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23804887f8fb3021545d35&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;구현에 사용할 기술은 당면한 문제와 필요한 기능을 고려해 선택해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380e98e51da6419240e7e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 같은 서비스 메시 기술은 강력한 인프라 기능이여 분산 아키텍처의 많은 영역에 영향을 미친다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380f4858cfb1e025d8d07&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇지만 모든 문제에 적합한 것은 아니므로 모든 문제에 해결책으로 고려해서는 안된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238022a539c0159a9772e9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아래 그림은 클라우드 아키텍처에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션 네트워킹 관심사를 이상적으로 분리&lt;/span&gt;하는 방법을 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238067b99acbec2c7e03b7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/b1ed5e37-6da5-40ef-be43-3884bbc3c688/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-8067-b99a-cbec2c7e03b7&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=i1rEerGi5Ja5OodMNT46MF6zollkRDHEyYH9lNuPVkw&quot; alt=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; width=&quot;624&quot; height=&quot;432.23169750603375&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380d9a035decce22f763d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380869e97cfa4586b8529&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;아키텍처의 하위 계층에는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;배포 자동화 인프라&lt;/span&gt;가 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238003a5a5e11c27156a38&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 인프라는 코드를 플랫폼에 배포하는 역할을 담당한다. 이스티오는 어떤 배포 자동화 도구를 사용해야 하는지를 규정하거나 침해하지 않는다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380cbb01ae3a8cd3e9e23&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;상위 계층에는 애플리케이션 비즈니스 로직(코드)이 있다. 이 코드에는 비즈니스 도메인은 물론 어떤 서비스를 어떤 순서로 호출할지, 서비스 상호작용 응답을 어떻게 처리할지, 프로세스 실패 시 어떻게 처리할지 등이 포함된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238091b173d12a2790c177&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오는 어떤 비즈니스 로직도 구현하거나 대체하지 않는다&lt;/span&gt;. 또한 서비스 오케스트레이션, 비즈니스 페이로드 변환, 페이로드 강화, 분할 집계, 규칙 계산 등을 수행하지 않는다. 이런 기능은 애플리케이션 내부 라이브러리와 프레임워크에 맡기는 것이 가장 좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238096bccddca3f267ed91&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380949e75e0664791ce1c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오는 배포 플랫폼과 애플리케이션 코드 사이의 연결 조직 역할&lt;/span&gt;을 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23802fa79cce951ce1ab79&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;복잡한 네트워킹 코드를 애플리케이션 외부로 꺼낼 수 있게 하는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238019b841d99d98e01dcf&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238088bc85fa3f07f1138a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;1.5.5 서비스 메시를 사용할 때의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;단점&lt;/span&gt;은 무엇인가?&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238036898ec401cf12255f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;첫 번째로, 서비스 메시를 사용하면 요청 경로에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;미들웨어, 특히 프록시가 추가&lt;/span&gt;된다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380eb934ac3d9ebc65ec1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 프록시가 많은 이점을 주기도 하지만, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;프록시에 익숙하지 않은 이들에게는 블랙박스가 돼 애플리케이션의 동작을 디버깅하기 어렵게&lt;/span&gt;&lt;/span&gt; 만들 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380d0ad40debd274a82be&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;엔보이 프록시는 아주 디버깅하기 쉽도록, 네트워크상에서 발생하고 있는 일을 많이 노출하게 특별히 설계됐다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238059a94ed5a3caa07e11&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그렇지만 엔보이를 운영하는 데 익숙하지 않은 사람들에게는 아주 복잡해 보일 수 있고, 기존 디버깅 방식을 방해할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380b0a3b4f6f59104789a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;두 번째로, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;테넌시 측면&lt;/span&gt;이다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380dcbe45f818231d2320&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;메시는 메시 내에서 실행되는 서비스 만큼 가치가 있다. 즉, 메시 내에 서비스가 많을수록 그 서비스들을 운영하는 데 메시의 가치가 높아진다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380ad85e8fd00bc1cc5bf&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;그러나 물리적 메시 배포의 테넌트 및 격리 모델에 적절한 정책, 자동화, 그리고 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;사전 고려 없이는 메시를 잘못 구성하면 많은 서비스에 영향을 미칠 수 있는 상황에&lt;/span&gt;&lt;/span&gt; 처할 수 있습니다. &lt;i&gt;&amp;rarr; 학습 필요. 잘 알고 설정 &lt;/i&gt;&lt;i&gt;필요&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c238040a339de96f0f22a2a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마지막으로, 서비스 메시는 요청 경로에 위치하기 때문에 서비스 및 애플리케이션 아키텍처의 매우 중요한 요소가 된다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238050a128eabaa398f127&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 메시는 보안, 관찰 가능성 및 라우팅 제어 자세를 개선할 수 있는 많은 기회를 제공할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380b88669d9325aaf475b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;단점은 메쉬가 또 다른 레이어와 또 다른 복잡성의 기회를 제공한다는 점입니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380d29e24de45ca36006b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;운영상 이슈(R&amp;amp;R) : 서비스 메시를 어떻게 설정하고 운영해야 하는지, 기존 조직의 절차와 거버넌스에는 어떻게 통합해야 하는지, 또한 팀 간에는 어떻게 통합해야 하는지 이해하기가 어려울 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d2b8b2c1c23801eab85dddda9952ee5&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380438b23fb8a634d7bff&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;일반적으로&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; 서비스 메시가 가져다주는 이점이 크지만, 그에 따른 트레이드오프가 없지 않다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23801984f8c92d8e248b3e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;다른 도구나 플랫폼과 마찬가지로 사용자는 자신의 맥락 및 제약 조건에 비춰 트레이드오프를 평가하고, 서비스 메시가 자신의 상황에 적합한지 판단해야 한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23809e84c8fbf7d1815e1a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;만약 적합하다면 메시를 성공적으로 도입하기 위한 계획를 세워야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238065addbf4a7138e880b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380cc8ccff815ead5c57e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;1.5.6. 요약 : &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 메시&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;는 이런 공통 관심사(&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;애플리케이션 네트워킹)&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;를 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션 대신 외부에서 투명한 방식으로 구현하는 인프라&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380c98105d08018567044&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;클라우드에서 마이크로서비스를 운영하는 데는 여러 도전과제가 있다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23807bbebed29e61aaafce&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;몇 가지를 꼽자면 신뢰할 수 없는 네트워크, 서비스 가용성, 이해하기 어려운 트래픽 흐름, 트래픽 암호화, 애플리케이션 상태, 성능 등이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c23805c97fbc404fbe61f3b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 어려움들은 각 애플리케이션 내에서 라이브러리를 사용해 패턴(서비스 디스커버리 등)들을 구현함으로써 완화된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380e6a68df67f2b2e7aa9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스들에 대한 관찰 가능성을 확보할 목적으로 메트릭과 트레이싱을 생성하고 배포하려면 추가적인 라이브러리와 서비스가 필요한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380fd8f46e5fb3c0c7806&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;서비스 메시&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;는 이런 공통 관심사를 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션 대신 프로세스 외부에서 투명한 방식으로 구현하는 인프라&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23808ca549d5925e579465&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 다음과 같은 요소로 구성된 서비스 메시 구현체다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380968847fe271ce9a6b3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 플레인&lt;/span&gt;, 애플리케이션과 함께 배포되는 서비스 프록시로 구서오디며, 정책을 구현하고 트래픽을 제어하고 메트릭과 트레이싱을 생성하는 등 애플리케이션을 보완한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23802d9182dd9523118bb3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인&lt;/span&gt;, 운영자가 데이터 플레인의 네트워크 동작을 제어할 수 있도록 API를 노출한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380b2812de2dd85f73fd4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이&lt;/span&gt;를 서비스 프록시로 사용하는데, 기능이 다양하고 동적으로 설정할 수 있기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380288e62fedece73113c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238046a715d9a0be08f8f8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238021b942db4ea0288111&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;서비스 매시(Service Mesh)&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23807b959bd5a48f1d95ad&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;등장 배경&lt;/span&gt; : 마이크로서비스 아키텍처 환경의 시스템 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;전체 모니터링의 어려움&lt;/span&gt;, 운영 시 시스템 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;장애나 문제&lt;/span&gt; 발생할 때 원인과 병목 구간 찾기 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;어려움&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380899281d51b9f8142bc&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/8192e791-cbec-4753-84b4-8f89b1e7c2a4/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=77cfd8605a2a2a872b909eb5f6334275c8ae7f6d1b5df2627dfd1850f14cf93a&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;356.57142857142856&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380569f76fdeee4d65e66&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;내부망 진입점에 역할을 하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;GW&lt;/span&gt;(예. API Gateway) 경우 모든 동작 처리에 무거워지거나, 내부망 내부 통신 제어는 어려움&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380f5bc28d536e1018bc6&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23807da019d0d1b70b53f4&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;개념&lt;/span&gt; : 마이크로서비스 간에 매시 형태의 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;통신&lt;/span&gt;&lt;/span&gt;이나 그 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;경로&lt;/span&gt;&lt;/span&gt;를 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;제어&lt;/span&gt;&lt;/span&gt; - 예) 이스티오(Istio), 링커드(Linkerd) - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://layer5.io/service-mesh-landscape&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380a183fbc6d2ab13ff03&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;기본 동작&lt;/span&gt; : 파드 간 통신 경로에 프록시를 놓고 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트래픽 모니터링&lt;/span&gt;&lt;/span&gt;이나 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트래픽 컨트롤&lt;/span&gt;&lt;/span&gt; &amp;rarr; 기존 애플리케이션 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;코드에 수정 없이&lt;/span&gt; 구성 가능!&lt;/li&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380c0a4dec9dd9c1812a3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기존 통신 환경&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23803f8f6ac166c3e472d3&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/bb33c163-5c93-41e8-a497-1034c402c279/1.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=fabbb7f9695afa4f2bbc21c2a507610a7f3636da785ca5729fff3da346a39082&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;108.69896570495374&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380e599c7ff5b4c542bcd&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380b9af65fd5bd1468965&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션 수정 없이, 모든 애플리케이션 통신 사이에 Proxy 를 두고 통신 해보자&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380078702ce2f104aaacf&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/8d3ae1bb-2358-49ba-9991-3c2e73c42d51/2.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=b49d32e41a39b5f1dcd68b4fa4ca0e9390c9fceec5a54377328953700bac26f8&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;152.5182362547632&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23804ca8aad88b2e3481dc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;파드 내에 사이드카 컨테이너로 주입되어서 동작&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23801a9bb2d0e11712abb1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Proxy 컨테이너가 Application 트래픽을 가로채야됨 &amp;rarr; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;iptables rule&lt;/span&gt; 구현 &amp;rArr; 가능한 이유는?&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23805fb496c52f44a97ecb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380739be3e6ed98f47503&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Proxy 는 결국 DataPlane 이니, 이를 중앙에서 관리하는 ControlPlane을 두고 중앙에서 관리를 하자&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380e19ae4ca0eca60a02a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/4a034fd2-0b0c-485c-a8e5-a7247f222a90/3.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=f597d67c7be56866dc1d170823c30c6f1893cd086d604012f69f4b65e8761825&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;298.92215568862275&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380a6bd7ee318dfc51a41&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Proxy 는 중앙에서 설정 관리가 잘되는 툴을 선택. 즉, 원격에서 동적인 설정 관리가 유연해야함 &amp;rarr; 풍부한 API 지원이 필요 &amp;rArr; Envoy&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380069b93ef74e52652db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;'구글 IBM 리프트(Lyft)'가 중심이 되어 개발하고 있는 오픈 소스 소프트웨어이며, C++ 로 구현된 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;고성능 Proxy&lt;/span&gt; 인 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-orange);&quot; class=&quot;highlighted-color color-orange&quot;&gt;엔보이(Envoy)&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238071aca6df0705cb3b44&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네트워크의 투명성을 목표, 다양한 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;필터체인&lt;/span&gt; 지원(L3/L4, HTTP L7), &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;동적 configuration API 제공, api 기반 hot reload 제공&lt;/u&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li id=&quot;block-1d2b8b2c1c238049b83ad81b71a81915&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;중앙에서 어떤 동작/설정을 관리해야 될까? 라우팅, 보안 통신을 위한 mTLS 관련, 동기화 상태 정보 등&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380598a79feb6916ac6bf&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380a6ab26c416ec5e02b7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트래픽 모니터링&lt;/span&gt;&lt;/span&gt; : 요청의 '에러율, 레이턴시, 커넥션 개수, 요청 개수' 등 메트릭 모니터링, 특정 서비스간 혹은 특정 요청 경로로 필터링 &amp;rarr; 원인 파악 용이!&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23809397b3e27f7c0ddc1c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트래픽 컨트롤&lt;/span&gt;&lt;/span&gt; : 트래픽 시프팅(Traffic shifting), 서킷 브레이커(Circuit Breaker), 폴트 인젝션(Fault Injection), 속도 제한(Rate Limit)&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23800a9b14e51d157cdb52&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-orange);&quot; class=&quot;highlighted-color color-orange&quot;&gt;트래픽 시프팅&lt;/span&gt;(Traffic shifting) : 예시) 99% 기존앱 + 1% 신규앱 , 특정 단말/사용자는 신규앱에 전달하여 단계적으로 적용하는 카니리 배포 가능&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380269961e12d9ca8a65b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-orange);&quot; class=&quot;highlighted-color color-orange&quot;&gt;서킷 브레이커&lt;/span&gt;(Circuit Breaker) : 목적지 마이크로서비스에 문제가 있을 시 접속을 차단하고 출발지 마이크로서비스에 요청 에러를 반환 (연쇄 장애, 시스템 전제 장애 예방)&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380618322fb69078a84ba&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-orange);&quot; class=&quot;highlighted-color color-orange&quot;&gt;폴트 인젝션&lt;/span&gt;(Fault Injection) : 의도적으로 요청을 지연 혹은 실패를 구현&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380f3b824f82e2a45be99&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-orange);&quot; class=&quot;highlighted-color color-orange&quot;&gt;속도 제한&lt;/span&gt;(Rate Limit) : 요청 개수를 제한&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380689ceaeed87ad50866&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380c787a8ff9c1cca2732&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;정환열&lt;/span&gt;님이 작성해서 공유해주신 Istio 사내 교육용 자료에서 가져왔습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380dfb252f5dbae7226c9&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/f40fa5ef-eb57-4a07-bf56-e8a3a118e8e8/CleanShot_2024-10-18_at_00.11.37.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=3972854a586f9d1f38900d7bbeb9f97d82d14705c48eeb5191d125a4551a2d86&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;1571.446153846154&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380399630c29fd7e024a7&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/5c7ca2d8-4be1-473d-8d82-51e19bad2e05/CleanShot_2024-10-18_at_00.16.49.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=dea09db2da25c9982786c920c95f730c30985a3e7d8be08c3f530e2973ac387e&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;517.6216216216216&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23805990d4dfe3296bee6a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23800b9cc0ff912bc95c37&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;이스티오 소개&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c23805ea3bac3412ba94f30&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://istio.io/latest/docs/ops/deployment/architecture/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fce82b997-7c6e-4aaa-9d2c-0d49854a4b1c%2Fistio-arch.svg?id=1d2b8b2c-1c23-805e-a3ba-c3412ba94f30&amp;amp;table=block&quot; alt=&quot;https://istio.io/latest/docs/ops/deployment/architecture/&quot; width=&quot;912&quot; height=&quot;636.2790697674419&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380c6bb32f1e6fb344cb3&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://devlos.tistory.com/100&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/16f42f46-a365-4060-a6a0-c042a996ba4b/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=91fabb3b6c2beaab53145367183cc4bf01ec3257da924ae18832e894a50920f4&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;https://devlos.tistory.com/100&quot; width=&quot;864&quot; height=&quot;429.3&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380038855c11d927dc616&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;파일럿(Pilot)&lt;/span&gt;: 모든 Envoy 사이드카에서 프록시 라우팅 규칙을 관리하며, 서비스 디스커버리와 로드 밸런싱 설정을 제공합니다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380a19286f5d2af73a6ed&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;갤리(Galley)&lt;/span&gt;: Istio와 쿠버네티스(TLS 연결 및 파일럿에 필요한 설정)를 연결해 주는 역할을 합니다. 서비스 메시 구성 데이터를 검증하고 변환합니다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380a3a06be884d92161c1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;시타델(Citadel)&lt;/span&gt;: 보안 기능을 담당하며, TLS 인증서 발급 및 관리를 통해 서비스 간 통신의 암호화를 수행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380a49e3aeea66b7b887a&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23800683c7d57bb629782d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio 구성요소와 envoy&lt;/span&gt; : 컨트롤 플레인(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt;) , &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;데이터 플레인&lt;/span&gt;(istio-proxy &amp;gt; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;envoy&lt;/span&gt;)&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238048947cd8417b19c57d&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt;&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Pilot&lt;/span&gt;(데이터 플레인과 통신하면서 라우팅 규칙을 동기화, ADS), &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Gally&lt;/span&gt;(Istio 와 K8S 연동, Endpoint 갱신 등), &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Citadel&lt;/span&gt;(연결 암호화, 인증서 관리 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23804b8afbc55a77589f1f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://istio.io/latest/docs/concepts/security/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fd2ed8eb7-3cc7-4470-86d7-ba855467a567%2Farch-sec.svg?id=1d2b8b2c-1c23-804b-8afb-c55a77589f1f&amp;amp;table=block&quot; alt=&quot;https://istio.io/latest/docs/concepts/security/&quot; width=&quot;912&quot; height=&quot;434.72&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238078b5e7e1a474b0ce9a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio proxy&lt;/span&gt;&lt;/span&gt; : Golang 으로 작성되었고 envoy 래핑한 Proxy, istiod와 통신하고 서비스 트래픽을 통제, 옵저버빌리티를 위한 메트릭 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380208413d6b1607c87ef&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23803784a6cdbc770f3a9e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 각 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;파드&lt;/span&gt; 안에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;사이드카&lt;/span&gt;로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 프록시&lt;/span&gt;가 들어가 있는 형태&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380698232ef63339cebb0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;모든 마이크로서비스간 통신은 엔보이를 통과하여, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭을 수집&lt;/span&gt;하거나 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트래픽 컨트롤&lt;/span&gt;을 할 수 있음&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380cbadc1d31bcc192e8b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;트래픽 컨트롤을 하기위해 엔보이 프록시에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;전송 룰&lt;/span&gt;을 설정 &amp;rarr; &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;컨트롤 플레인&lt;/span&gt;의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오&lt;/span&gt;가 정의된 정보를 기반으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 설정&lt;/span&gt;을 하게 함&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380da93cdf197d2efa4f2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;마이크로서비스 간의 통신을 mutual TLS 인증(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;mTLS&lt;/span&gt;)으로 서로 TLS 인증으로 암호화 할 수 있음&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380e9a79cc634c1a9ac58&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;각 애플리케이션은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;파드&lt;/span&gt; 내의 엔보이 프록시에 접속하기 위해 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;localhost 에 TCP 접속&lt;/span&gt;을 함&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380ea91d1de60ebe7bd66&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23809da9e3ceee7b84f717&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;Envoy 소개&lt;/code&gt; : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;L4/7 Proxy&lt;/span&gt; , Istio 의 Sidecar proxy 로 사용* - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/life_of_a_request&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크&lt;/a&gt; &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/intro/terminology&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;주요 용어&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c23806aa1f3d3f58a71c073&quot; class=&quot;notion-bookmark&quot; style=&quot;box-sizing: border-box; margin: 4px 0px; border-radius: var(--bookmark-border-radii); border: var(--bookmark-border); transition: background 120ms ease-in;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit; display: flex;&quot; href=&quot;https://blog.naver.com/yu3papa/223614975957&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
&lt;div class=&quot;notion-bookmark__content&quot; style=&quot;box-sizing: border-box; overflow: hidden; flex: 4 1 180px; padding: var(--bookmark-padding);&quot;&gt;
&lt;h5 class=&quot;notion-bookmark__title&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 2px; line-height: 1.25rem; font-size: 0.875rem; text-wrap-mode: nowrap; overflow: hidden; text-overflow: ellipsis;&quot;&gt;KANS(Kubernetes Advanced NeStudy) 3기 [6주차] - Envoy Proxy &amp;amp; Gateway API&lt;/h5&gt;
&lt;p class=&quot;notion-bookmark__description&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-size: 0.75rem; line-height: 1rem; opacity: 0.6; height: 2rem; overflow: hidden;&quot; data-ke-size=&quot;size16&quot;&gt;HOST OS : Windows 11 Pro HyperVisor : VirtualBox 7 가상머신 OS : Rocky Linux 9.4 I...&lt;/p&gt;
&lt;div class=&quot;notion-bookmark__link&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; margin-top: 6px;&quot;&gt;
&lt;div style=&quot;box-sizing: border-box; margin-inline-end: 6px; display: flex;&quot;&gt;&lt;img class=&quot;notion-icon&quot; style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; display: block; object-fit: contain; object-position: center center;&quot; src=&quot;https://blog.naver.com/favicon.ico?3&quot; width=&quot;16&quot; height=&quot;16&quot; /&gt;&lt;/div&gt;
&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-size: 0.75rem; line-height: 1rem; text-wrap-mode: nowrap; overflow: hidden; text-overflow: ellipsis;&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;notion-bookmark__cover&quot; style=&quot;box-sizing: border-box; flex: 1 1 180px; position: relative; width: 500px; height: 6.75rem;&quot;&gt;
&lt;div style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380078f63d816bcd725f9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio 구성요소와 envoy&lt;/span&gt; : 컨트롤 플레인(istiod) - ADS 를 이용한 Configuration 동기화 - 데이터 플레인(istio-proxy &amp;rarr; envoy)&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380938918dfa59a396d75&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://blog.naver.com/alice_k106/222000680202&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F832f0d89-1e5c-4f32-a612-4125acbf1902%2FUntitled.png?id=1d2b8b2c-1c23-8093-8918-dfa59a396d75&amp;amp;table=block&quot; alt=&quot;https://blog.naver.com/alice_k106/222000680202&quot; width=&quot;816&quot; height=&quot;379.512426035503&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238021b768c5b2892a418c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://www.anyflow.net/sw-engineer/istio-internals-by-xds&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/79e70f5c-8907-4982-980a-20acac86f683/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=b6428f30d09444690159b371bf24e8d3e7a4abd324e93162b8ada3fbef8e0811&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;https://www.anyflow.net/sw-engineer/istio-internals-by-xds&quot; width=&quot;816&quot; height=&quot;293.67920792079207&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238017a4acc0846d7d8472&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/life_of_a_request&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fedd537ec-6ec0-4fc5-b209-f4e0683daa1d%2Flor-architecture.svg?id=1d2b8b2c-1c23-8017-a4ac-c0846d7d8472&amp;amp;table=block&quot; alt=&quot;https://www.envoyproxy.io/docs/envoy/latest/intro/life_of_a_request&quot; width=&quot;1008&quot; height=&quot;497.28000000000003&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380d9b27af11fbb2bb70f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Cluster&lt;/span&gt; : envoy 가 트래픽을 포워드할 수 있는 논리적인 서비스 (엔드포인트 세트), 실제 요청이 처리되는 IP 또는 엔드포인트의 묶음을 의미.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238098a73af12a880600a3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Endpoint&lt;/span&gt; : IP 주소, 네트워크 노드로 클러스터로 그룹핑됨, 실제 접근이 가능한 엔드포인트를 의미. 엔드포인트가 모여서 하나의 Cluster 가 된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380539f68db41f6e0d7d9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Listener&lt;/span&gt; : 무엇을 받을지 그리고 어떻게 처리할지 IP/Port 를 바인딩하고, 요청 처리 측면에서 다운스트림을 조정하는 역할.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23806f823fde8793652546&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Route&lt;/span&gt; : Listener 로 들어온 요청을 어디로 라우팅할 것인지를 정의. 라우팅 대상은 일반적으로 Cluster 라는 것에 대해 이뤄지게 된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23808989fbd24a15c19de0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Filter&lt;/span&gt; : Listener 로부터 서비스에 트래픽을 전달하기까지 요청 처리 파이프라인&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380a7b79acfa3889e7a0c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;UpStream&lt;/span&gt; : envoy 요청을 포워딩해서 연결하는 백엔드 네트워크 노드 - 사이드카일때 application app, 아닐때 원격 백엔드&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238017a3fcd78e60cf3475&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;DownStream&lt;/span&gt; : An entity connecting to envoy, In non-sidecar models this is a remote client&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238060974bc7e83fef9202&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23806d9c1ece18b46e717c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Envoy 용어 정리&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;정환열&lt;/span&gt;님이 작성해서 공유해주신 Istio 사내 교육용 자료 내용이 좋아서 가져왔습니다.&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380bfbd4ec45a1d3bcbfb&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1056px; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; width: 1056px; object-fit: contain; border-radius: var(--image-border-radii); object-position: center center;&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/c54f6ab8-ce18-419b-be92-83d05aba0991/CleanShot_2024-10-17_at_23.41.03.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=56ce988f6321ce0ce712ccf03de2d9b73e953b0b2b1e48d43c23546339366e3e&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;961.984375&quot; height=&quot;492.44438244047615&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23808799a9cd28e2f41672&quot; class=&quot;notion-image align-start page-width&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; width: 1056px; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; width: 1056px; object-fit: contain; border-radius: var(--image-border-radii); object-position: center center;&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/0ca2e902-9d7b-461d-8e63-4b60aeb5b3c3/CleanShot_2024-10-17_at_23.41.15.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=3f20b2a6445ce98bc22363fc6a1159943135640ae0c323ce4fb8e49e7fc854a4&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;961.9921875&quot; height=&quot;513.8591809006211&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238002a9f6d52b2a03184d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238037b6b2e6fd16403d4e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Envoy는 구성을 동적으로 관리하기 위한 강력한 API를 제공&lt;/span&gt;이 중요합니다.&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c23803b8e2bd2f0da458f3c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/785d63a2-003f-468f-8ea5-337977730cab/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=423f7d1ca7e2f05ddca9320f1e7f1579eaf998eae226b4d20d03f015e763d6dc&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;500.9765625&quot; height=&quot;409.98081961077844&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238014b4c2c03ad31a39b1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Service Mesh 솔루션이나, Gateway API 구현체들을 Enovy를 내부적으로 사용하고 있으며, Envoy가 제공하는 동적 구성을 위한 API (xDS Sync API)를 이용하여 다양한 네트워크 정책을 구성하게 됩니다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23801cb3d1dc4d80f8c0db&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Envoy의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;xDS&lt;/span&gt; Sync API는 아래와 같은 레이어에서 동작하게 됩니다.&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23803f9096d2c76daee92e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;LDS - Listener Discovery Service&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238062b55efa30cad81acb&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;RDS - Route Discovery Service&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380fb9476d005ae7722f3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;CDS - Cluseter Discovery Service&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380ff9015c1916d6c226a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;EDS - Endpoint Discovery Service&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380f2844ef1afe05c8bfb&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://blog.naver.com/yu3papa/223614975957&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/c4cbd8bb-ee02-41a5-a3eb-810a71790142/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=24fdb49d6ebdda971be95b3851bdb7255a6fe736b05c67c4cbab76b5b1e15771&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;https://blog.naver.com/yu3papa/223614975957&quot; width=&quot;768&quot; height=&quot;331.527950310559&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23805bbdd6db2b825f2585&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/cd029ddd-3c72-43ee-807e-54c1a01373b6/CleanShot_2024-10-13_at_20.01.19.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=8c446c9b2edc223617709d9679148be9160b0f5a3848cc969e6305c31b44c0fb&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;563.5764705882353&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23809da9e3ceee7b84f717&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;[추천 영상]&lt;/code&gt; LG ThinQ Cloud 에&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; Istio 운영 경험 사례&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://www.youtube.com/watch?v=CUprGsY4DYg&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Youtube&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380a5bfe6c7522c93259d&quot; class=&quot;notion-embed&quot; style=&quot;box-sizing: border-box; width: 1080px; align-self: center;&quot;&gt;
&lt;div class=&quot;notion-embed__content&quot; style=&quot;box-sizing: border-box; display: flex; position: relative;&quot;&gt;
&lt;div class=&quot;notion-embed__container__wrapper align-start&quot; style=&quot;box-sizing: border-box; width: 1080px; display: flex; justify-content: start; padding-bottom: 351px;&quot;&gt;
&lt;div class=&quot;notion-embed__container&quot; style=&quot;box-sizing: border-box; position: absolute; min-height: 100px; max-width: 100%; height: 351px; margin: 0px auto; width: 624px;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/CUprGsY4DYg?rel=0&quot; width=&quot;300&quot; height=&quot;225&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380b981ccda88bb22cbdc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238062988cf7cac97c4681&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;K8S &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ClusterIP&lt;/span&gt; 의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;랜덤 부하분산&lt;/span&gt; vs &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio&lt;/span&gt; Service Mesh 기반 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Lease Request&lt;/span&gt; 방식 &amp;rArr; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vCPU 사용률 절감 및 안정화&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380968531d8f7bbf220f9&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/a9c162e9-7a20-41c2-82fa-e5d14b82d68d/CleanShot_2025-04-11_at_13.16.16.png?table=block&amp;amp;id=1d2b8b2c-1c23-8096-8531-d8f7bbf220f9&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=0qX-gJ61HIjgdMH0ulAmq4hKb7p0HFzVH33P-13SGNs&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;404.9844236760125&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380419f1efdcfdfcca02c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23800abe45cff71fa54af0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션 코드 수정 없는, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;심리스한 트래픽 이전&lt;/span&gt;과 트래픽 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;미러링&lt;/span&gt; 등 활용&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380d6848ad81a44a76e3c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/2a2317a7-7476-4d10-a976-040172711a22/CleanShot_2025-04-11_at_13.16.51.png?table=block&amp;amp;id=1d2b8b2c-1c23-80d6-848a-d81a44a76e3c&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=0rLauiqA_iKbGBMrHwraEpRvDG62DZKJ_RAqlejgGYU&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;354.8844621513945&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23809dbb80f723e6510a75&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380ff9c8ac687ab874d60&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;오픈소스&lt;/span&gt; 기반 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;L7 Telemetry&lt;/span&gt; 구축&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380658342ec7f268c1fc0&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/931c0064-6557-4578-9c02-8abf985911b1/CleanShot_2025-04-11_at_13.17.58.png?table=block&amp;amp;id=1d2b8b2c-1c23-8065-8342-ec7f268c1fc0&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=IGOcxlgHXGgAYpeA65-ZW_-xO1ZkUMYZghUUzozWr10&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;338.524101665206&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380eea653edd6861af609&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238043a828cfb417270074&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;보안 : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;mTLS&lt;/span&gt; 기반 통신&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380deb685cbb666c6bd8a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/ea55d6e9-df69-4226-9b91-3a69ef79f9ce/CleanShot_2025-04-11_at_13.18.36.png?table=block&amp;amp;id=1d2b8b2c-1c23-80de-b685-cbb666c6bd8a&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=2k6HPEJ6P1C_w4i03hdv5skOTPaDSba23nKXlgXfQy8&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;367.24346076458755&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380c792efc3ad486c3f0b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380b9bbe5c9139ea3d4e0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;별도 구축 없는 mock server&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380e8bc66fca5e1fde455&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/9cac5222-cd9d-41dd-82ef-9a32cefd5313/CleanShot_2025-04-11_at_13.18.48.png?table=block&amp;amp;id=1d2b8b2c-1c23-80e8-bc66-fca5e1fde455&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=Y2KSiZiX60tOZjXGLM7q44Ol2y4jZC-V9rJwkUv4sws&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;327.8048780487805&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238011913ce1442b415e89&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238001a631cdea607e2010&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;적용 예정 기능 : app 로깅 최적화, DNS Proxying, Ambient Mdoe&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380fa9942f509f2754be4&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/8112135c-b4bd-402b-8d3f-dbe8fa02d763/CleanShot_2025-04-11_at_13.19.21.png?table=block&amp;amp;id=1d2b8b2c-1c23-80fa-9942-f509f2754be4&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=4eUhLhIZePtTEHx5dNiPh1GB0Lr_liMVKWSIwwL3_ns&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;376.1095890410959&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23800b8e0ac8d034811c63&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238043a7cac0c256efba08&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(참고) OpenTelemetry 구성&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380d9886bf6f80272b767&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/bedb01df-b681-4c3c-8813-94b1fd6fa5e5/CleanShot_2025-04-11_at_13.20.10.png?table=block&amp;amp;id=1d2b8b2c-1c23-80d9-886b-f6f80272b767&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=Q6wVyWQXUAQTDtK_RYSsv2Glzprnzu4_c1wIGhoOnoo&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;323.41123996431753&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238026890de4616e800b58&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/cf73ed81-783f-4ec9-8e56-e87508c21092/CleanShot_2025-04-11_at_13.20.20.png?table=block&amp;amp;id=1d2b8b2c-1c23-8026-890d-e4616e800b58&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=_LYd6e924oY3l-nCQZ2uOPZZbjNErFMrSLZooG7spmo&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;323.61852861035425&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23805da116ebc43ea4a877&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/367cd325-da33-4b8a-9298-0b34816442af/CleanShot_2025-04-11_at_13.20.32.png?table=block&amp;amp;id=1d2b8b2c-1c23-805d-a116-ebc43ea4a877&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=gI-WgXoNC2DPhPivjzzzEETyPQcBYZW36U9tUCdfLNs&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;353.4261838440112&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380b18f3af7f22c00cf3c&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c238082ba88cfe7e580db3a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380c29086eac84c423a58&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Istio 기본 실습&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238028a4a6c1fa0f2a4cd8&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;2.1. kind(k8s) 소개 및 설치와 기본 사용 : &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;macOS&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; 사용자 , &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-pink);&quot; class=&quot;highlighted-color color-pink&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;Windows (WSL2)&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; 사용자&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380b0b783c32b3d7f9900&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kind 소개&lt;/span&gt; : &amp;lsquo;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;도커 IN 도커&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;docker in docker&lt;/span&gt;&amp;rsquo;로 쿠버네티스 클러스터 환경을 구성 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kind.sigs.k8s.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380408336fd659c440a3e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/c781c0f0-3649-4e13-a892-d7fc46a65cc8/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=c3fca880c13d7080f2a41b78518f3fcd809c465f454364ad52b62dbe2f6d444c&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;192&quot; height=&quot;115.78477157360405&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380d98bcefccf050f0528&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kind&lt;/span&gt;&lt;/span&gt; or &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;k&lt;/span&gt;&lt;/span&gt;ubernetes &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;in d&lt;/span&gt;&lt;/span&gt;ocker is a suite of tooling for local Kubernetes &amp;ldquo;clusters&amp;rdquo; where each &amp;ldquo;node&amp;rdquo; is a Docker container&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380ec9012da2e340a48de&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kind&lt;/span&gt; is targeted at &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;testing&lt;/span&gt; Kubernetes , kind supports &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-orange);&quot; class=&quot;highlighted-color color-orange&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;multi-node&lt;/span&gt;&lt;/span&gt; (including &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;HA&lt;/span&gt;&lt;/span&gt;) clusters&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380bd95c9faf8601fd600&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kind&lt;/span&gt; uses&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kubeadm&lt;/span&gt;&amp;nbsp;to configure cluster nodes.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23809da80dd13b3fe4b22b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://xn--%20:%20https-oj58b228fie0d3nd//kind.sigs.k8s.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/6c53b71f-b2d9-40f0-a55f-c8f54f7d85eb/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=075ac4ce911af3fd68e7c724441734f05c7a79c390d8ee4b02d2a62e6c372d91&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;그림 출처: &quot; width=&quot;864&quot; height=&quot;486&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380f0891ac6b7daba5b2b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238046adc8ebbd8b86b649&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kind 설치&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;macOS&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; 사용자&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380178a3ef790798a80f6&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Docker Desktop 설치 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://docs.docker.com/desktop/install/mac-install/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380e59703f3918474448f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습 환경 : Kind 사용하는 도커 엔진 리소스에 최소 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;vCPU 4&lt;/span&gt;&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Memory 8GB&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; &lt;/span&gt;할당을 권고 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kind.sigs.k8s.io/docs/user/quick-start/#settings-for-docker-desktop&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;링크&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d2b8b2c1c238026ab73fcf6318d676b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380c58128e5e2adaebdf1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kind 및 툴 설치&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380f5b94ce6e0a040908e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;필수 툴 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d2b8b2c1c23802baf10daa52ef250ec&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;sql&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# Install Kind
brew install kind
kind --version

# Install kubectl
brew install kubernetes-cli
kubectl version --client=true

## kubectl -&amp;gt; k 단축키 설정
echo &quot;alias =kubecolor&quot; &amp;gt;&amp;gt; ~/.zshrc

# Install Helm
brew install helm
helm version&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list letters&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380478851cb7c8619aaae&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(권장) 유용한 툴 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div id=&quot;block-1d2b8b2c1c238065a394cadbfc5e4b67&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;cmake&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 툴 설치
brew install krew
brew install kube-ps1
brew install kubectx

# kubectl 출력 시 하이라이트 처리
brew install kubecolor
echo &quot;alias kubectl=kubecolor&quot; &amp;gt;&amp;gt; ~/.zshrc
echo &quot;compdef kubecolor=kubectl&quot; &amp;gt;&amp;gt; ~/.zshrc

# krew 플러그인 설치
kubectl krew install neat stern&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238044a61cf5909700ac88&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238055aa80db5616b8f0f5&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;i&gt;kind 기본 사용 - 클러스터 배포 및 확인&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c23801293e1e49310f88f47&quot; class=&quot;notion-callout bg-gray-light border&quot; style=&quot;box-sizing: border-box; background-color: var(--color-bg-gray-light); display: flex; margin-top: 2px; margin-bottom: 4px; border-color: var(--color-bg-gray-light); overflow: hidden; padding: var(--callout-padding); border-radius: var(--callout-border-radii); box-shadow: var(--callout-shadow);&quot;&gt;
&lt;div class=&quot;notion-callout__icon&quot; style=&quot;box-sizing: border-box; min-width: 1.5rem; width: 1.8rem; display: var(--callout-icon-display); position: relative; top: 2px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; text-align: center; border-radius: 3px; width: 20px; font-size: 20px; line-height: 1.3rem; height: 20px; fill: var(--color-text-default-light);&quot; class=&quot;notion-icon text&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-callout__content&quot; style=&quot;box-sizing: border-box; display: flex; flex-direction: column; margin-inline-start: 8px; overflow: hidden; width: 959.047px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;/span&gt;
&lt;p id=&quot;block-1d2b8b2c1c23803aa90ecaa2948aec1f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;회사에서 사용 중인 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kubeconfig&lt;/span&gt; 가 있다면, 미리 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kubeconfig 백업&lt;/span&gt; 후 kind 실습을 하시거나 혹은 아래 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kubeconfig 변수&lt;/span&gt; 지정 사용 권장&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380d1b039dc343266512a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;(옵션) 별도 &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kubeconfig&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt; 지정 후 사용&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c23805ba375c3cf9db2dc0a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 방안1 : 환경변수 지정
export KUBECONFIG=/Users/&amp;lt;Username&amp;gt;/Downloads/kind/config

# 방안2 : 혹은 --kubeconfig ./config 지정 가능

# 클러스터 생성
kind create cluster

# kubeconfig 파일 확인
ls -l /Users/&amp;lt;Username&amp;gt;/Downloads/kind/config
-rw-------  1 &amp;lt;Username&amp;gt;  staff  5608  4 24 09:05 /Users/&amp;lt;Username&amp;gt;/Downloads/kind/config

# 파드 정보 확인
kubectl get pod -A

# 클러스터 삭제
kind delete cluster
unset KUBECONFIG&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380c68205e479cb16684f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23803fab6de5227aba5d26&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 클러스터 배포 전 확인
docker ps

# Create a cluster with kind
kind create cluster

# 클러스터 배포 확인
kind get clusters
kind get nodes
kubectl cluster-info

# 노드 정보 확인
kubectl get node -o wide

# 파드 정보 확인
kubectl get pod -A
kubectl get componentstatuses

# 컨트롤플레인 (컨테이너) 노드 1대가 실행
docker ps
docker images

# kube config 파일 확인
cat ~/.kube/config
혹은
cat $KUBECONFIG # KUBECONFIG 변수 지정 사용 시

# nginx 파드 배포 및 확인 : 컨트롤플레인 노드인데 파드가 배포 될까요?
kubectl run nginx --image=nginx:alpine
kubectl get pod -owide

# 노드에 Taints 정보 확인
kubectl describe node | grep Taints
Taints:             &amp;lt;none&amp;gt;

# 클러스터 삭제
kind delete cluster

# kube config 삭제 확인
cat ~/.kube/config
혹은
cat $KUBECONFIG # KUBECONFIG 변수 지정 사용 시&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380cabe38eb6ce9d6f735&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238008bdf6dad908f23ec5&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kind 설치&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-pink);&quot; class=&quot;highlighted-color color-pink&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;Windows (WSL2)&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; 사용자&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380b8859be8d228a7cb3a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kind 로 k8s 배포&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;macOS&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; 사용자&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380208255eeb03c876c7f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;기본 정보 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380d9b9d0e77290c56b7e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;properties&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 클러스터 배포 전 확인
docker ps

# 방안1 : 환경변수 지정
export KUBECONFIG=$PWD/kubeconfig

# Create a cluster with kind : 1.29.14 , 1.30.10 , 1.31.6 , 1.32.2
kind create cluster --name myk8s --image kindest/node:v1.32.2 --config - &amp;lt;&amp;lt;EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000
    hostPort: 30000
  - containerPort: 30001
    hostPort: 30001
  - containerPort: 30002
    hostPort: 30002
  - containerPort: 30003
    hostPort: 30003
  kubeadmConfigPatches:
  - |
    kind: ClusterConfiguration
    controllerManager:
      extraArgs:
        bind-address: &quot;0.0.0.0&quot;
    etcd:
      local:
        extraArgs:
          listen-metrics-urls: &quot;http://0.0.0.0:2381&quot;
    scheduler:
      extraArgs:
        bind-address: &quot;0.0.0.0&quot;
  - |
    kind: KubeProxyConfiguration
    metricsBindAddress: &quot;0.0.0.0&quot;
EOF

# 확인
kind get nodes --name myk8s
kubens default

# kind 는 별도 도커 네트워크 생성 후 사용 : 기본값 172.18.0.0/16
docker network ls
docker inspect kind | jq

# k8s api 주소 확인 : 어떻게 로컬에서 접속이 되는 걸까?
kubectl cluster-info

Kubernetes control plane is running at https://127.0.0.1:50970
CoreDNS is running at https://127.0.0.1:50970/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

# docker 에서 local 50970 port를 6443으로 prot fowarding하고 있음
docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS                                                             NAMES
bf3999d21be4   kindest/node:v1.32.2   &quot;/usr/local/bin/entr&amp;hellip;&quot;   3 minutes ago   Up 3 minutes   0.0.0.0:30000-30003-&amp;gt;30000-30003/tcp, 127.0.0.1:50970-&amp;gt;6443/tcp   myk8s-control-plane

# 노드 정보 확인 : CRI 는 containerd 사용
kubectl get node -o wide

# 파드 정보 확인 : CNI 는 kindnet 사용
kubectl get pod -A -o wide

# 네임스페이스 확인 &amp;gt;&amp;gt; 도커 컨테이너에서 배운 네임스페이스와 다릅니다!
kubectl get namespaces

# 컨트롤플레인노드(컨테이너) 확인 : 도커 컨테이너 이름은 myk8s-control-plane
docker ps
docker images
docker exec -it myk8s-control-plane ss -tnlp

# 디버그용 내용 출력에 ~/.kube/config 권한 인증 로드
kubectl get pod -v6

# kube config 파일 확인
cat $KUBECONFIG
ls -l $KUBECONFIG&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238039ac53f351c7c6da18&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23807480adf6870eddc222&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;kube-ops-view&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23801b864ee1538474ed4c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/16325e2e-674e-480c-a43c-5a94bae00d96/CleanShot_2024-12-03_at_14.26.40.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=4fa63e3241988b744cc1726591fedd8d9d253d51f6adcb2b9caecf9bc35d3bbc&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;480&quot; height=&quot;215.26717557251908&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380e89f60f93789333607&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vim&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# kube-ops-view
# helm show values geek-cookbook/kube-ops-view
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30000 --set env.TZ=&quot;Asia/Seoul&quot; --namespace kube-system

# 설치 확인
kubectl get deploy,pod,svc,ep -n kube-system -l app.kubernetes.io/instance=kube-ops-view

# kube-ops-view 접속 URL 확인 (1.5 , 2 배율)
open &quot;http://127.0.0.1:30000/#scale=1.5&quot;
open &quot;http://127.0.0.1:30000/#scale=2&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380829dd8fb07d7a87cc7&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380949ff2c4591f2ea7a0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;(참고) 클러스터 삭제&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23802a9d66e17ef00df7e2&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;properties&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 클러스터 삭제
kind delete cluster --name myk8s
docker ps
cat $KUBECONFIG
unset KUBECONFIG&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23808682e6e8acbcf2c1f8&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23806aacabfab2c05b5c67&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kind 로 k8s 배포&lt;/span&gt; : &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-pink);&quot; class=&quot;highlighted-color color-pink&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;Windows (WSL2)&lt;/u&gt;&lt;/span&gt;&lt;/span&gt; 사용자&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380dd9ce4e5d622e3ce89&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;(옵션) prometheus-stack 설치 by helm - &lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;&lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://artifacthub.io/packages/helm/prometheus-community/kube-prometheus-stack&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380b194eec099c731bbe4&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 모니터링
watch kubectl get pod,pvc,svc,ingress -n monitoring

# repo 추가
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

# 파라미터 파일 생성
cat &amp;lt;&amp;lt;EOT &amp;gt; monitor-values.yaml
prometheus:
  service:
    type: NodePort
    nodePort: 30001
    
  prometheusSpec:
    scrapeInterval: &quot;15s&quot;
    evaluationInterval: &quot;15s&quot;
    podMonitorSelectorNilUsesHelmValues: false
    serviceMonitorSelectorNilUsesHelmValues: false
    retention: 5d
    retentionSize: &quot;10GiB&quot;

grafana:
  defaultDashboardsTimezone: Asia/Seoul
  adminPassword: prom-operator
  service:
    type: NodePort
    nodePort: 30002

defaultRules:
  create: false
prometheus-windows-exporter:
  prometheus:
    monitor:
      enabled: false
alertmanager:
  enabled: false
EOT
cat monitor-values.yaml

# 배포
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack --version 69.3.1 \
-f monitor-values.yaml --create-namespace --namespace monitoring

# 각각 웹 접속 실행
## Windows(WSL2) 사용자는 아래 주소를 자신의 웹 브라우저에서 기입 후 직접 접속, 이후에도 동일.
open http://127.0.0.1:30001 # macOS
open http://127.0.0.1:30002 # macOS

# 확인
## alertmanager-0 : 사전에 정의한 정책 기반(예: 노드 다운, 파드 Pending 등)으로 시스템 경고 메시지를 생성 후 경보 채널(슬랙 등)로 전송
## grafana : 프로메테우스는 메트릭 정보를 저장하는 용도로 사용하며, 그라파나로 시각화 처리
## prometheus-0 : 모니터링 대상이 되는 파드는 &amp;lsquo;exporter&amp;rsquo;라는 별도의 사이드카 형식의 파드에서 모니터링 메트릭을 노출, pull 방식으로 가져와 내부의 시계열 데이터베이스에 저장
## node-exporter : 노드익스포터는 물리 노드에 대한 자원 사용량(네트워크, 스토리지 등 전체) 정보를 메트릭 형태로 변경하여 노출
## operator : 시스템 경고 메시지 정책(prometheus rule), 애플리케이션 모니터링 대상 추가 등의 작업을 편리하게 할수 있게 CRD 지원
## kube-state-metrics : 쿠버네티스의 클러스터의 상태(kube-state)를 메트릭으로 변환하는 파드
helm list -n monitoring
kubectl get pod,svc,ingress,pvc -n monitoring
kubectl get-all -n monitoring
kubectl get prometheus,servicemonitors -n monitoring
kubectl get crd | grep monitoring

# 삭제
helm uninstall -n monitoring kube-prometheus-stack&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23808da18df86d5fbf6f30&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238092a836f21562c37745&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;(옵션) Bookinfo 애플리케이션 배포 및 반복 접속&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c23808ea286ecba4e2adb7c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;properties&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# Bookinfo 애플리케이션 배포
kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml

# 확인
kubectl get all,sa

# ratings 파드에서 product 웹 접속(Service:ClusterIP) 확인
kubectl exec &quot;$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')&quot; -c ratings -- curl -sS productpage:9080/productpage | grep -o &quot;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&quot;

# productpage 서비스 NodePort 30003 설정
cat &amp;lt;&amp;lt;EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
  name: productpage
  labels:
    app: productpage
    service: productpage
spec:
  type: NodePort
  ports:
  - name: http
    nodePort: 30003
    port: 9080
  selector:
    app: productpage
EOF

# productpage 서비스 NodePort 30003 접속
## Windows(WSL2) 사용자는 아래 주소를 자신의 웹 브라우저에서 기입 후 직접 접속, 이후에도 동일.
echo &quot;http://127.0.0.1:30003/productpage&quot;
open http://127.0.0.1:30003/productpage

# 로그
kubectl stern -l app=productpage
혹은
kubectl log -l app=productpage -f

# NodePort 를 통한 반복 접속
while true; do curl -s http://127.0.0.1:30003/productpage | grep -o &quot;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&quot; ; echo &quot;--------------&quot; ; sleep 1; done
for i in {1..100};  do curl -s http://127.0.0.1:30003/productpage | grep -o &quot;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&quot; ; done


# (참고) bookinfo 삭제
kubectl delete -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380fb9d7dd8fe9b7e4f38&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380dd9652edfc65bf653f&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2.2. kind : k8s(1.23.17) 배포 &amp;rarr; Istio 실습용 kind Cluster&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c23808bae06e87c07af1b64&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
git clone https://github.com/AcornPublishing/istio-in-action
cd istio-in-action/book-source-code-master
pwd # 각자 자신의 pwd 경로
code .

# 
kind create cluster --name myk8s --image kindest/node:v1.23.17 --config - &amp;lt;&amp;lt;EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000 # Sample Application (istio-ingrssgateway)
    hostPort: 30000
  - containerPort: 30001 # Prometheus
    hostPort: 30001
  - containerPort: 30002 # Grafana
    hostPort: 30002
  - containerPort: 30003 # Kiali
    hostPort: 30003
  - containerPort: 30004 # Tracing
    hostPort: 30004
  - containerPort: 30005 # kube-ops-view
    hostPort: 30005
  extraMounts:
  - hostPath: /Users/gylee/Documents/Study/istio/week1/istio-in-action/book-source-code-master # 각자 자신의 pwd 경로로 설정
    containerPath: /istiobook
networking:
  podSubnet: 10.10.0.0/16
  serviceSubnet: 10.200.1.0/24
EOF

# 설치 확인
docker ps

# 노드에 기본 툴 설치
docker exec -it myk8s-control-plane sh -c 'apt update &amp;amp;&amp;amp; apt install tree psmisc lsof wget bridge-utils net-tools dnsutils tcpdump ngrep iputils-ping git vim -y'
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238023bf29c37afecf83a8&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(옵션) 편의성 툴 설치&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380429445c77ef17a155c&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;sql&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;
# (옵션) kube-ops-view
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30005 --set env.TZ=&quot;Asia/Seoul&quot; --namespace kube-system
kubectl get deploy,pod,svc,ep -n kube-system -l app.kubernetes.io/instance=kube-ops-view

## kube-ops-view 접속 URL 확인
open &quot;http://localhost:30005/#scale=1.5&quot;
open &quot;http://localhost:30005/#scale=1.3&quot;

# (옵션) metrics-server
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm install metrics-server metrics-server/metrics-server --set 'args[0]=--kubelet-insecure-tls' -n kube-system
kubectl get all -n kube-system -l app.kubernetes.io/instance=metrics-server&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238076bbe5e910302085d3&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23804d9603d429e5b3033a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2.3. Istio control plane 알아보기&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c23806abc7dfc03c78c7dc1&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;들어가며&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380d182aad00729578be3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Istio control plane 제공 기능&lt;/span&gt;&lt;/li&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23804caf7accce6f2a8fdd&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;운영자가 원하는 라우팅/회복력 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;routing/resilience&lt;/span&gt; 동작을 지정할 수 있는 API&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380dcac95d0b71aef4464&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;데이터 플레인 설정을 위한 API&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380379bbff008fb4852e3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;데이터 플레인에 대한 서비스 검색 추상화 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;service discovery abstraction&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380208d90c3f80242e791&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;사용자 정책 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;specifying usage policies&lt;/span&gt; 지정 API&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380cd8681c6a690d8cfbc&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;인증서 발급 및 순환 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Certificate issuance and rotation&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380c3b8b7ffca9eebecee&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드 ID 할당 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Workload identity assignment&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238087ab40ee8c89704e44&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;통합 원격 측정 컬렉션 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Unified telemetry collection&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238030b24ed372e15f8b43&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 프록시 사이드카 주입 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Service-proxy sidecar injection&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238075918ef2d26a26f0f0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;네트워크 경계 지정 및 접근 방법 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Specification of network boundaries and how to access them&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23803da2d8f78e729ed608&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238002982bd37dce5d66e7&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;위 기능 대부분은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt; 라는 단일 컨트롤 플레인 구성 요소에 구현돼 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380319e9ff5fe737df08a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/4c3cee58-0a94-4712-b2e4-be628559efcc/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-8031-9e9f-f5fe737df08a&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=3Tg1thIbI2Kcnqo1GmvsY7mAYsWo6ogbuzeLgG9vvkk&quot; alt=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; width=&quot;672&quot; height=&quot;462.7757255936676&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380d8a07ffdac9f1d4f2b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380029b14edb7eb2b31f1&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2.3.1 istiod&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23808b9873e1d3817d57f1&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 컨트롤 플레인 역할은 istiod로 구현된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380b58e41d63810610072&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 파일럿 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;istio pilot&lt;/span&gt; 이라고도 하는 istiod 는 사용자나 운영자가 지정한 Higher-Level 이스티오 설정을 받아 이르 각 데이터 플레인 서비스 프록시에 맞는 프록시 전용 설정으로 변환하는 역할을 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380759bd7cea8a41ed26b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/9709de5f-42e1-4c59-9b02-bc26f2938ceb/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-8075-9bd7-cea8a41ed26b&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=jdTjOMztxPnjlwAUui3Sayi8L6XkV0vqHFjSJt_r5js&quot; alt=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; width=&quot;720&quot; height=&quot;360.5564142194745&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380bfae5bea9b6870102a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 &amp;lsquo;선언형 설정&amp;rsquo;을 해석해 서비스 프록시 전용 설정으로 적용된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238011bdfbcf24fabbb826&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오는 서비스 프록시로 엔보이를 사용하므로 이 설정들은 엔보이 설정으로 변환된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380fa84fdfc0fc9666fa3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;예를 들어 아래 처럼 &amp;lsquo;선언형 설정&amp;rsquo;과 변환된 &amp;lsquo;엔보이 설정&amp;rsquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23803caf08fdf83c7671e7&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# istip api 선언형 설정
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: catalog
spec:
  hosts:
  - catalog
  http:
  - match:
    - headers:
        x-dark-launch:
          exact: &quot;v2&quot;
    route:
    - destination:
        host: catalog
        subset: version-v2
  - route:
    - destination:
        host: catalog
        subset: version-v1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380ba8a0eedc6f063b603&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vala&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 변환된 &amp;lsquo;엔보이 설정&amp;rsquo;
&quot;domains&quot;: [
  &quot;catalog.prod.svc.cluster.local&quot;
],
&quot;name&quot;: &quot;catalog.prod.svc.cluster.local:80&quot;,
&quot;routes&quot;: [
  {
    &quot;match&quot;: {
      &quot;headers&quot;: [
        {
          &quot;name&quot;: &quot;x-dark-launch&quot;,
          &quot;value&quot;: &quot;v2&quot;
        }
      ],
      &quot;prefix&quot;: &quot;/&quot;
    },
    &quot;route&quot;: {
      &quot;cluster&quot;: &quot;outbound|80|v2|catalog.prod.svc.cluster.local&quot;,
      &quot;use_websocket&quot;: false
    }
},
{
  &quot;match&quot;: {
    &quot;prefix&quot;: &quot;/&quot;
  },
  &quot;route&quot;: {
    &quot;cluster&quot;:
    &quot;outbound|80|v1|catalog.prod.svc.cluster.local&quot;,
    &quot;use_websocket&quot;: false
    }
  }
]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380cca702d8fa963c7520&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380c9bb97f6568e9d4907&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;istiod가 노출하는 이 데이터 플레인 API는 엔보이의 디스커버리 API를 구현한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380dcb27fcf6b1c40957f&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;서비스 디스커버리용(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;LDS&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Listener Discovery Service&lt;/span&gt;), 엔드포인트용(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;EDS&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Endpoint DS&lt;/span&gt;), 라우팅 큐칙용(RDS, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Route DS&lt;/span&gt;) 등과 같은 이런 디스커버리 API를 xDS API라고 부른다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23809d9760c87763dd9bf0&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 API들이 있어서 데이터 플레인이 설정 방식을 분리할 수 있으며, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;중지/재시작 없이 Envoy 에 동적으로 설정을 적용&lt;/span&gt; 할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380789de6e454a5027494&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380e3a87aea4b54d5c17e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;
&lt;p class=&quot;notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;ID 관리&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Identity Management&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;notion-text__children&quot; style=&quot;box-sizing: border-box; margin-inline-start: 1.5rem;&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380b1852beaa1415f3f3e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/01926434-2113-4513-9d38-0fbbfd51d51a/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-80b1-852b-eaa1415f3f3e&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=_PzE_CBWhHB77C9Tb-WpVDQiilV0F5WJqlAG5yZCxGU&quot; alt=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; width=&quot;720&quot; height=&quot;587.5126903553299&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238095a50ac9fc8729c19e&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/85a6bca8-68b2-40e1-9a4f-381424613764/CleanShot_2025-04-08_at_15.54.52.png?table=block&amp;amp;id=1d2b8b2c-1c23-8095-a50a-c9fc8729c19e&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=e5mxdKtXxIQ4a7MBRsz5IfQx90hJG-D-xjhaPVU55TA&quot; alt=&quot;image&quot; width=&quot;720&quot; height=&quot;508.30564784053155&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23804286e5c236d7e65b6a&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오의 핵심 기능 중 하나는 각 워크로드 인스턴스에 ID를 할당하고 서비스 간 네트워크 전송을 암호화하는 것이다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238095be67fa1eb56859a2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 기능은 서비스 메시가 요청 경로 양 끝단 모두에 위치한 덕분에 가능하다. 이때 이스티오는 트래픽 암호화에 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;X.509 인증서&lt;/span&gt;를 사용한다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238099a77dcfedcf1897c9&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;워크로드 ID는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;SPIFFE&lt;/span&gt; 사양에 따라 이 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인증서에 내장&lt;/span&gt;된다. &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://spiffe.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://spiffe.io/&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23801bad30dd5ed538e239&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;덕분에 이스티오에서는 애플리케이션이 인증서, 공개/비밀키 등을 인지할 필요 없이 강력한 상호 인증(mTLS)을 사용할 수 있다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380f4a8adeecd4a6cff89&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이런 보안을 가능케 하는 인증서의 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;검증, 서명, 전달 및 로테이션&lt;/span&gt;은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istiod&lt;/span&gt;가 다룬다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c238075a696ec16f400b46b&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23805da6dfe0a968051e23&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2.3.2 인그레스 및 이그레스 게이트웨이&lt;/span&gt; &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;Ingress and egress gateway&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c238074a4a4ccc347a8a5ab&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/1595ac03-60f3-432e-9d30-382e11eb370d/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-8074-a4a4-ccc347a8a5ab&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=GOVTrXz-Zvj0WHA-wCImCMf6Ai7o5FFbCe0kR_2z-v0&quot; alt=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; width=&quot;720&quot; height=&quot;487.1196172248804&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238049a2d7fd0eeac78e87&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오가 동작하는 K8S 클러스터 내부망에 들어오거나 빠져나갈때 동작하는 구성요소인&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; Ingress/Egress Gateway&lt;/span&gt;.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c238029b15add96ed6be685&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이 두 구성요소는 이스티오 설정을 이해할 수 있는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;엔보이 프록시&lt;/span&gt;이다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380068c20e9a62525c1af&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;애플리케이션과 함께 작동하는 이스티오 서비스 프록시와 매우 유사하게 설정된다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380ccbce8dec82201b872&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;차이점은 어떤 애플리케이션 워크로드에도 독립적이며 트래픽이 클러스터로 드나드는 것을 허용하는 역할뿐이라는 점이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380dbbba2f6443ac48efc&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23807ead9fc8fb946f5c94&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238012b382d8d6695b5e76&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2.4 Getting to know the Istio control plane &amp;rarr; &lt;/span&gt;istio 1.17.8 설치 - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/setup/install/istioctl/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Install&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/v1.17/docs/setup/additional-setup/config-profiles/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;profile&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c23801ea93de9e0724e4ff2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/854db57c-c04c-4c8d-a06a-5f6286baa58e/CleanShot_2025-04-08_at_15.53.31.png?table=block&amp;amp;id=1d2b8b2c-1c23-801e-a93d-e9e0724e4ff2&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=0UzkmJv1O4zzItkb8B9hr3VPOcudt3-my6QztP8xSfY&quot; alt=&quot;image&quot; width=&quot;576&quot; height=&quot;530.8235294117646&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23803f87c1f61185689e43&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/11db27ee-a36f-41a8-83ef-fc325856b49e/CleanShot_2025-04-08_at_15.53.59.png?table=block&amp;amp;id=1d2b8b2c-1c23-803f-87c1-f61185689e43&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=l-1Omak2yt6z-iyk---qLNL4u_K1OET7rYrtxct13Rc&quot; alt=&quot;image&quot; width=&quot;576&quot; height=&quot;499.3022636484687&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23801d8491c7c1c8088ca3&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# myk8s-control-plane 진입 후 설치 진행
docker exec -it myk8s-control-plane bash
-----------------------------------
# 코드 파일들 마운트 확인
tree /istiobook/ -L 1

# istioctl 설치
export ISTIOV=1.17.8
echo 'export ISTIOV=1.17.8' &amp;gt;&amp;gt; /root/.bashrc

curl -s -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIOV sh -
tree istio-$ISTIOV -L 2 # sample yaml 포함
cp istio-$ISTIOV/bin/istioctl /usr/local/bin/istioctl
istioctl version --remote=false

# default 프로파일 컨트롤 플레인 배포
istioctl x precheck # 설치 전 k8s 조건 충족 검사
istioctl profile list
istioctl install --set profile=default -y
✔ Istio core installed
✔ Istiod installed
✔ Ingress gateways installed
✔ Installation complete

# 설치 확인 : istiod, istio-ingressgateway, crd 등
kubectl get istiooperators -n istio-system
NAME              REVISION   STATUS   AGE
installed-state                       4m49s

kubectl get istiooperators -n istio-system -o yaml
...
  spec:
    components:
      base:
        enabled: true
      cni:
        enabled: false
      egressGateways:
      - enabled: false
        name: istio-egressgateway
      ingressGateways:
      - enabled: true
        name: istio-ingressgateway
      istiodRemote:
        enabled: false
      pilot:
        enabled: true
    hub: docker.io/istio
    meshConfig:
      defaultConfig:
        proxyMetadata: {}
      enablePrometheusMerge: true
    profile: default
    ...
      pilot:
        autoscaleEnabled: true
        autoscaleMax: 5
        autoscaleMin: 1
        configMap: true
        cpu:
          targetAverageUtilization: 80
        deploymentLabels: null
        enableProtocolSniffingForInbound: true
        enableProtocolSniffingForOutbound: true
        env: {}
        image: pilot
        keepaliveMaxServerConnectionAge: 30m
        nodeSelector: {}
        podLabels: {}
        replicaCount: 1
        traceSampling: 1
      telemetry:
        enabled: true
        v2:
          enabled: true
          metadataExchange:
            wasmEnabled: false
          prometheus:
            enabled: true
            wasmEnabled: false
          stackdriver:
            configOverride: {}
            enabled: false
            logging: false
            monitoring: false
            topology: false


kubectl get all,svc,ep,sa,cm,secret,pdb -n istio-system
NAME                                       READY   STATUS    RESTARTS   AGE
pod/istio-ingressgateway-996bc6bb6-c6g6v   1/1     Running   0          31s
pod/istiod-7df6ffc78d-w7tr7                1/1     Running   0          47s
...

kubectl get crd | grep istio.io | sort
istioctl verify-install # 설치 확인

# 보조 도구 설치
kubectl apply -f istio-$ISTIOV/samples/addons

#
kubectl get pod -n istio-system

NAME                                   READY   STATUS    RESTARTS   AGE
grafana-b854c6c8-c7j4p                 1/1     Running   0          64s
istio-ingressgateway-996bc6bb6-c6g6v   1/1     Running   0          2m22s
istiod-7df6ffc78d-w7tr7                1/1     Running   0          2m38s
jaeger-5556cd8fcf-q79pw                1/1     Running   0          64s
kiali-648847c8c4-pvkzj                 1/1     Running   0          64s
prometheus-7b8b9dd44c-v6jhm            2/2     Running   0          64s

# 빠져나오기
exit
-----------------------------------

#
kubectl get cm -n istio-system istio -o yaml
kubectl get cm -n istio-system istio -o yaml | kubectl neat&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23800ea45ec219ac28a28b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/4c3cee58-0a94-4712-b2e4-be628559efcc/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-8031-9e9f-f5fe737df08a&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=3Tg1thIbI2Kcnqo1GmvsY7mAYsWo6ogbuzeLgG9vvkk&quot; alt=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; width=&quot;672&quot; height=&quot;462.7757255936676&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380c9a983d94ee9928b7f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238043b011f7ca74f8845d&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2.5 Deploying your first application in the service mesh &amp;rarr;&lt;/span&gt; 서비스 메시에 첫 애플리케이션 배포&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c238002a783eb5a500d2d93&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/c2298a61-a590-4d8e-b668-24b2e9d9763b/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-8002-a783-eb5a500d2d93&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=vfKFn3lIFRMQGE0PQ9PH_jjrW2yM2kFv5JFMqvxfWg8&quot; alt=&quot;https://kimdoky.github.io/devops/2025/04/10/study-istio-week1/&quot; width=&quot;672&quot; height=&quot;284.0412371134021&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23809c9e7ad29d674b506b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
kubectl create ns istioinaction

# 방법1 : yaml에 sidecar 설정을 추가
cat services/catalog/kubernetes/catalog.yaml
docker exec -it myk8s-control-plane istioctl kube-inject -f /istiobook/services/catalog/kubernetes/catalog.yaml
...
  - args:
        - proxy
        - sidecar
        - --domain
        - $(POD_NAMESPACE).svc.cluster.local
        - --proxyLogLevel=warning
        - --proxyComponentLogLevel=misc:error
        - --log_output_level=default:info
        - --concurrency
        - &quot;2&quot;
        env:
        - name: JWT_POLICY
          value: third-party-jwt
        - name: PILOT_CERT_PROVIDER
          value: istiod
        - name: CA_ADDR
          value: istiod.istio-system.svc:15012
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
  ...
        image: docker.io/istio/proxyv2:1.13.0
        name: istio-proxy


# 방법2 : namespace에 레이블을 추가하면 istiod (오퍼레이터)가 해당 namepsace의 pod spec에 자동으로 sidecar 설정을 주입
kubectl label namespace istioinaction istio-injection=enabled
kubectl get ns --show-labels

istioinaction        Active   74s     istio-injection=enabled,kubernetes.io/metadata.name=istioinaction

# 
kubectl get mutatingwebhookconfiguration
NAME                         WEBHOOKS   AGE
istio-revision-tag-default   4          9m24s # 특정 revision의 사이드카 주입 설정 관리
istio-sidecar-injector       4          9m45s # Istio는 각 애플리케이션 Pod에 Envoy 사이드카 프록시를 자동으로 주입
                                              ## 네임스페이스나 Pod에 istio-injection=enabled 라벨이 있어야 작동 

kubectl get mutatingwebhookconfiguration istio-sidecar-injector -o yaml

#
kubectl get cm -n istio-system istio-sidecar-injector -o yaml | kubectl neat
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23806a816cc39e88a8dd7f&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/d8494c51-23f9-43cb-9d0d-054f67ca11f8/CleanShot_2024-10-13_at_19.59.32.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=5de580d9b4c7140a0ebd0b9d0413bb67f7af7e9cc331bbff62c4234e889727a6&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;768&quot; height=&quot;484.72969374167775&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23803bb209faa879d06039&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23800bbb28e042caf7d449&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vala&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
cat services/catalog/kubernetes/catalog.yaml
kubectl apply -f services/catalog/kubernetes/catalog.yaml -n istioinaction

cat services/webapp/kubernetes/webapp.yaml 
kubectl apply -f services/webapp/kubernetes/webapp.yaml -n istioinaction

# istio-injection에 의해서 envoy proxy container가 sidercar로 배치되어 container가 2개이다.
kubectl get pod -n istioinaction
NAME                     READY   STATUS    RESTARTS   AGE
catalog-6cf4b97d-jx8xw   2/2     Running   0          29s
webapp-7685bcb84-zlxmv   2/2     Running   0          29s

# catalog 디플로이먼트에서 파드 관련 spec
kubectl get deploy -n istioinaction catalog -o jsonpath=&quot;{.spec.template.spec}&quot; | jq

# catalog 파드 관련 spec : 위 디플로이먼트와 파드 spec 을 비교해보자
kubectl get pod -n istioinaction -l app=catalog -o jsonpath=&quot;{.items[0].spec}&quot; | jq


# 접속 테스트용 netshoot 파드 생성
cat &amp;lt;&amp;lt;EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: netshoot
spec:
  containers:
  - name: netshoot
    image: nicolaka/netshoot
    command: [&quot;tail&quot;]
    args: [&quot;-f&quot;, &quot;/dev/null&quot;]
  terminationGracePeriodSeconds: 0
EOF

# catalog 접속 확인
kubectl exec -it netshoot -- curl -s http://catalog.istioinaction/items/1 | jq
{
  &quot;id&quot;: 1,
  &quot;color&quot;: &quot;amber&quot;,
  &quot;department&quot;: &quot;Eyewear&quot;,
  &quot;name&quot;: &quot;Elinor Glasses&quot;,
  &quot;price&quot;: &quot;282.00&quot;
}

# webapp 접속 확인 : webapp 서비스는 다른 서비스에서 데이터를 집계해 브라우저에 시각적으로 표시한다. 
## 즉 webapp은 다른 백엔드 서비스의 파사드 facade 역할을 한다.
kubectl exec -it netshoot -- curl -s http://webapp.istioinaction/api/catalog/items/1 | jq
{
  &quot;id&quot;: 1,
  &quot;color&quot;: &quot;amber&quot;,
  &quot;department&quot;: &quot;Eyewear&quot;,
  &quot;name&quot;: &quot;Elinor Glasses&quot;,
  &quot;price&quot;: &quot;282.00&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238023bac2da048ccc966c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380708470c36f985d74f5&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;vala&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 아래 방법 대신 임시 사용
kubectl port-forward -n istioinaction deploy/webapp 8080:8080
확인 후 CTRL+C 로 종료

#
open http://localhost:8080&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c23809ab56cc2d3afa25237&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;webapp 서비스&lt;/span&gt;는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;다른 서비스에서 데이터를 집계해 브라우저에 시각적으로 표시&lt;/span&gt;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380279688f4ecc586f73d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/40b0a7b2-2f83-4a2b-97cf-9be6fa702946/CleanShot_2025-04-05_at_16.30.28.png?table=block&amp;amp;id=1d2b8b2c-1c23-8027-9688-f4ecc586f73d&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=kSkP9hcGqc-yn5SrLSgsBOntuQoqPUJlqx88lmpXpkc&quot; alt=&quot;image&quot; width=&quot;624&quot; height=&quot;568.3960396039604&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23804c8e0be8375f5a5e51&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/fea2f87f-7418-486a-8257-aced496f3df1/CleanShot_2025-04-05_at_16.30.47.png?table=block&amp;amp;id=1d2b8b2c-1c23-804c-8e0b-e8375f5a5e51&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=SAJozfXnzYdIzePdNxXPxSVhh5BLHse80vedOWJOazg&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;184.63561643835618&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380a7a6a0f9d50d4f66ab&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380b18f3af7f22c00cf3c&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2.6 Exploring the power of Istio with resilience, observability, and traffic control &amp;rarr;&lt;/span&gt; 복원력, 관찰가능성, 트래픽 제어&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c238099bd6dfb45606b9d5e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 프록시가 호출 경로 커넥션의 양쪽에 위치하는 덕분에, 이스티오는 애플리케이션 사이에 무슨 일이 일어나고 있는지에 대해 많은 텔레메트리를 수집하고 통찰력을 항샹시킬 수 있다. 이스티오의 서비스 프록시는 각 애플리케이션 곁에 사이드카로 배포되므로, 서비스 프록시가 수집하는 통찰력은 애플리케이션의 &amp;lsquo;프로세스 외부&amp;rsquo;에서 나온다. 즉, 대부분의 경우 애플리케이션은 이 수준의 관찰력을 얻기 위해 라이브러리나 프레임워크에 특정 구현을 추가할 필요가 없다. 프록시에게 애플리케이션은 블랙박스이며, 텔레메트리는 네트워크를 통해 관찰된 애플리케이션의 동작에 초점을 맞춘다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23802f86fbd71a7fed8d0b&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오가 생성&lt;/span&gt;하는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;텔레메트리&lt;/span&gt;는 관찰 가능성의 2가지 주요 범주에 대한 것이다. 첫 번째는 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;주요 메트릭&lt;/span&gt;, 이를테면 초당 요청 수, 실패 횟수, 지연 시간 백분위수와 같은 것들이다. 이런 값들을 알면 시스템에서 문제가 시작되는 지점에 대한 훌륭한 통찰력을 얻을 수 있다. 두 번째로, 이스티오는 OpenTracing 와 같은 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;분산 트레이싱&lt;/span&gt;을 지원할 수 있다. 이스티오는 애플리케이션들이 신경 쓰지 않아도 분산 트레이싱 백엔드로 스팬을 보낼 수 있다. 이렇게 하면 특정 서비스 상호작용 중에 어떤 일이 일어났는지, 어디에서 지연이 발생했는지를 확인하고 전반적인 호출 지연에 대한 정보를 얻을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23802895c0f46e1815352d&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/dd85ac3f-df24-4db9-a158-776df3a12768/aebeb0bb-29dc-4a86-b5ac-b155ea3cf9b6/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;amp;X-Amz-Credential=ASIAZI2LB466XZHPVU6I%2F20250412%2Fus-west-2%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20250412T135046Z&amp;amp;X-Amz-Expires=21600&amp;amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJHMEUCIQCcdbmbLMu%2FBsdjRSQP%2BSkj3WbiZu%2FR9FflOqRjGqca3AIgHwPYK9%2B2T1Ksk%2FCGbalQgTcLriwK15ktXkZbMqw3rHsqiAQI1v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDFxnz12amvXaO09zmCrcAwp%2Fasnr2A62Cxm7%2FzYYCvR4QKpuR9n%2FKKslv1ih6wbwIjEFoJGu76Nr6ohUyD4tx5Ws6jHX5y%2BsirrabzZBl99JUDvlPaeiBP%2Flji1zPbKzWefNpedXC0CzsD4jxg8DlXAKO9WTY8Vodd8idQbGt5uuVXlOHMAIMSyawK4gnsXPSAFpXUzoksucOMXc9pVPUhSyX64rCqG3nazXVlnhW1tl8MDluqlx9WS6ZC5nS8ojuctn9%2F7qP0TuVQOu5Jhda3izFilq8Kd%2BaQu3XQt%2BtEwpEOWsc8ozDtBTCDu7WtdeU0vzI9dn8nxzMwu%2FxCgFhls6XhGQCnv4QaQ7lYes7tce31QxZpV6qVJqcr%2BloqHLkf4jnbrbMVoFz6Zqs6ydeZVuYarMzNXWtgmp3LRjjpUntLzXU7uwpfQZZeDinV2i9jppe98oRjUjxbDS9IlslQz7woxXT6SpAyRcs6Ezuv2dRQRshADoQMlIzbzozijp0pAzlSayYwF45JAznVzY%2FFQkzsx6nb87VeLEuPGzKdcA%2BnnEpfUDha6oZPUedz1va2zWZXQSitWpwdjlgekVI%2FvIdDEQq0FfINmI%2FVc%2BVSqPSQC2I6LNszZv5EUynuG%2BMXa3C%2F3BD%2BRnZ3JmMP7N6b8GOqUBz%2B33D2SSKfJLtKjLGgE7hw8nefP77oCtzAMGLYRZ%2Fp8ohSyQ0%2BYyyjBcxTDr3f05rzqG%2BFNSqogiKwgGw3%2Fc7GTMcadDpBo3H%2B2%2F%2BQM4bFF3OrMeyUWkW3pz16Kd7uVoKL4ado%2Bmrh3Ow7VHvThmzC8TMYPd9g2d3EKj1a3%2BTi5%2BWShEk07wcCKjI00uuIIfhP%2FfrphvTP%2Feb2L8xJ9lQcNcp0rd&amp;amp;X-Amz-Signature=bd7faea90495529efaf189089cedcd378f5c474a85775d49913bf511877ab557&amp;amp;X-Amz-SignedHeaders=host&amp;amp;x-id=GetObject&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;419.9713603818616&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380e099adc27e0869b4e4&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;tcl&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# istioctl proxy-status : 단축어 ps
# 현재는 ingressgateway가 외부로 노출되어 있지 않으므로 RDS(Route Discovery Service)가 not sent 상태이다.
docker exec -it myk8s-control-plane istioctl proxy-status
NAME                                                  CLUSTER        CDS        LDS        EDS        RDS          ECDS         ISTIOD                      VERSION
catalog-6cf4b97d-d5xbt.istioinaction                  Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-7df6ffc78d-w7tr7     1.17.8
istio-ingressgateway-996bc6bb6-c6g6v.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     NOT SENT     NOT SENT     istiod-7df6ffc78d-w7tr7     1.17.8
webapp-7685bcb84-h9t7q.istioinaction                  Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-7df6ffc78d-w7tr7     1.17.8

docker exec -it myk8s-control-plane istioctl ps

kubectl get po -n istio-system istio-ingressgateway-996bc6bb6-c6g6v -o yaml
apiVersion: v1
kind: Pod
metadata:
  annotations:
    prometheus.io/path: /stats/prometheus
    prometheus.io/port: &quot;15020&quot;
    prometheus.io/scrape: &quot;true&quot;
    sidecar.istio.io/inject: &quot;false&quot;
  creationTimestamp: &quot;2025-04-11T15:18:42Z&quot;
  generateName: istio-ingressgateway-996bc6bb6-
  labels:
    app: istio-ingressgateway
    chart: gateways
    heritage: Tiller
    install.operator.istio.io/owning-resource: unknown
    istio: ingressgateway              # istio의 Gateway CR을 생성할때, selector를 통해서 해당 label을 선택해주게 된다.

#
cat ch2/ingress-gateway.yaml
cat &amp;lt;&amp;lt;EOF | kubectl -n istioinaction apply -f -
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: outfitters-gateway
  namespace: istioinaction
spec:
  selector:
    istio: ingressgateway # use istio default controller, istio-ingressgateway pod에 label로 설정이 되어있다
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - &quot;*&quot;
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: webapp-virtualservice
  namespace: istioinaction
spec:
  hosts:
  - &quot;*&quot;
  gateways:
  - outfitters-gateway
  http:
  - route:
    - destination:
        host: webapp
        port:
          number: 80
EOF

#
kubectl get gw,vs -n istioinaction
NAME                                             AGE
gateway.networking.istio.io/outfitters-gateway   7s

NAME                                                       GATEWAYS                 HOSTS   AGE
virtualservice.networking.istio.io/webapp-virtualservice   [&quot;outfitters-gateway&quot;]   [&quot;*&quot;]   7s


# istioctl proxy-status : 단축어 ps
# 이제 ingressgateway가 설정되었으므로, istio-ingressgateway의 RDS가 SYNCED로 변경되었다.
docker exec -it myk8s-control-plane istioctl proxy-status
NAME                                                  CLUSTER        CDS        LDS        EDS        RDS        ECDS         ISTIOD                      VERSION
catalog-6cf4b97d-nccfj.istioinaction                  Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-7df6ffc78d-bj7h7     1.17.8
istio-ingressgateway-996bc6bb6-mz544.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-7df6ffc78d-bj7h7     1.17.8
webapp-7685bcb84-c55ck.istioinaction                  Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-7df6ffc78d-bj7h7     1.17.8

ISTIOIGW=istio-ingressgateway-996bc6bb6-c6g6v.istio-system
WEBAPP=webapp-7685bcb84-h9t7q.istioinaction

# istioctl proxy-config : 단축어 pc
docker exec -it myk8s-control-plane istioctl proxy-config all $ISTIOIGW
docker exec -it myk8s-control-plane istioctl proxy-config all $WEBAPP

docker exec -it myk8s-control-plane istioctl proxy-config listener $ISTIOIGW
docker exec -it myk8s-control-plane istioctl proxy-config route $ISTIOIGW
docker exec -it myk8s-control-plane istioctl proxy-config cluster $ISTIOIGW
docker exec -it myk8s-control-plane istioctl proxy-config endpoint $ISTIOIGW
docker exec -it myk8s-control-plane istioctl proxy-config log $ISTIOIGW

docker exec -it myk8s-control-plane istioctl proxy-config listener $WEBAPP
docker exec -it myk8s-control-plane istioctl proxy-config route $WEBAPP
docker exec -it myk8s-control-plane istioctl proxy-config cluster $WEBAPP
docker exec -it myk8s-control-plane istioctl proxy-config endpoint $WEBAPP
docker exec -it myk8s-control-plane istioctl proxy-config log $WEBAPP

# envoy 가 사용하고 있는 인증서 정보 확인
docker exec -it myk8s-control-plane istioctl proxy-config secret $ISTIOIGW
docker exec -it myk8s-control-plane istioctl proxy-config secret $WEBAPP


#
docker exec -it myk8s-control-plane istioctl proxy-config routes deploy/istio-ingressgateway.istio-system
NAME          DOMAINS     MATCH                  VIRTUAL SERVICE
http.8080     *           /*                     webapp-virtualservice.istioinaction
              *           /stats/prometheus*
              *           /healthz/ready*


# istio-ingressgateway 서비스 NodePort 변경 및 nodeport 30000로 지정 변경
kubectl get svc,ep -n istio-system istio-ingressgateway
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 8080, &quot;nodePort&quot;: 30000}]}}'
kubectl get svc -n istio-system istio-ingressgateway

# istio-ingressgateway 서비스 externalTrafficPolicy 설정 : ClientIP 수집 확인
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;:{&quot;externalTrafficPolicy&quot;: &quot;Local&quot;}}'
kubectl describe svc -n istio-system istio-ingressgateway

#
kubectl stern -l app=webapp -n istioinaction
kubectl stern -l app=catalog -n istioinaction

#
curl -s http://127.0.0.1:30000/api/catalog | jq
curl -s http://127.0.0.1:30000/api/catalog/items/1 | jq
curl -s http://127.0.0.1:30000/api/catalog -I | head -n 1

# webapp 반복 호출
while true; do curl -s http://127.0.0.1:30000/api/catalog/items/1 ; sleep 1; echo; done
while true; do curl -s http://127.0.0.1:30000/api/catalog -I | head -n 1 ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done
while true; do curl -s http://127.0.0.1:30000/api/catalog -I | head -n 1 ; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 0.5; echo; done

## 번외
# webapp용 virtualservice(= client에 노출되는 fe용 vs이다!)를 아래와 같이 hosts: [ &quot;webapp&quot; ]으로 설정하면
# client즉, local에서 127.0.0.1:30000으로 접근하면 접근이 불가하다.
# 이유는 virtualservice에 의해 istio ingressgateway -&amp;gt; istio proxy(webapp)으로 전달 될때 host가 webapp이 아니라 127.0.0.1로 접근했기때문에 drop 된다.
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: webapp-virtualservice-2
  namespace: istioinaction
spec:
  gateways:
  - outfitters-gateway
  hosts:
  - webapp
  http:
  - route:
    - destination:
        host: webapp2
        port:
          number: 8081
          
# 하지만, netshoot-pod에서 아래와 같이 webapp이라는 host로 해당 service에 접근하면 host rule에 의해 pass되어 정상적으로 접근되는것을 볼 수 있다.
netshoot  ~  curl -s http://webapp.istioinaction/api/catalog/            
[{&quot;id&quot;:1,&quot;color&quot;:&quot;amber&quot;,&quot;department&quot;:&quot;Eyewear&quot;,&quot;name&quot;:&quot;Elinor Glasses&quot;,&quot;price&quot;:&quot;282.00&quot;},{&quot;id&quot;:2,&quot;color&quot;:&quot;cyan&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Atlas Shirt&quot;,&quot;price&quot;:&quot;127.00&quot;},{&quot;id&quot;:3,&quot;color&quot;:&quot;teal&quot;,&quot;department&quot;:&quot;Clothing&quot;,&quot;name&quot;:&quot;Small Metal Shoes&quot;,&quot;price&quot;:&quot;232.00&quot;},{&quot;id&quot;:4,&quot;color&quot;:&quot;red&quot;,&quot;department&quot;:&quot;Watches&quot;,&quot;name&quot;:&quot;Red Dragon Watch&quot;,&quot;price&quot;:&quot;232.00&quot;}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380a8b1a6c1ba267606ac&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2.6.1 Istio observability -&lt;/span&gt; Istio 관찰가능성&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c23804c9378f533d721f321&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/b328eef3-8db6-457e-8e24-fd1ce2fee9ba/CleanShot_2025-04-05_at_16.31.05.png?table=block&amp;amp;id=1d2b8b2c-1c23-804c-9378-f533d721f321&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=g6sMMj64B0QIYXbYU9a-bKaAOpqRDj0dNXcEWwRBPSc&quot; alt=&quot;image&quot; width=&quot;524.984375&quot; height=&quot;335.1376268450185&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380b49828c94d9ad64f8a&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;tcl&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# NodePort 변경 및 nodeport 30001~30003으로 변경 : prometheus(30001), grafana(30002), kiali(30003), tracing(30004)
kubectl patch svc -n istio-system prometheus -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 9090, &quot;targetPort&quot;: 9090, &quot;nodePort&quot;: 30001}]}}'
kubectl patch svc -n istio-system grafana -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 3000, &quot;targetPort&quot;: 3000, &quot;nodePort&quot;: 30002}]}}'
kubectl patch svc -n istio-system kiali -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 20001, &quot;targetPort&quot;: 20001, &quot;nodePort&quot;: 30003}]}}'
kubectl patch svc -n istio-system tracing -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 16686, &quot;nodePort&quot;: 30004}]}}'

# Prometheus 접속 : envoy, istio 메트릭 확인
open http://127.0.0.1:30001

# Grafana 접속
open http://127.0.0.1:30002

# Kiali 접속 1 : NodePort
open http://127.0.0.1:30003

# (옵션) Kiali 접속 2 : Port forward
kubectl port-forward deployment/kiali -n istio-system 20001:20001 &amp;amp;
open http://127.0.0.1:20001

# tracing 접속 : 예거 트레이싱 대시보드
open http://127.0.0.1:30004
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380569a17e09f79fd343d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d2b8b2c1c23807f8896d943b5754b9b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;그파라나 확인&lt;/u&gt;&lt;/span&gt; : 대시보드 - Istio Service Dashboard &amp;rArr; 상단 Service (webapp.. 선택)&lt;i&gt; &amp;larr; 트래픽 반복 접속 해둔 상태&lt;/i&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380caa0f4e1ca44609d4a&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/49abf4fc-d7a9-45dc-bfc9-9d5f9663a4aa/CleanShot_2025-04-05_at_16.41.14.png?table=block&amp;amp;id=1d2b8b2c-1c23-80ca-a0f4-e1ca44609d4a&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=mvyZsZhb97TgWXpbOeZ27PVJm0yQj-pWV_CgAx6aWR8&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;353.9429407461595&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238054b769da498527b24c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d2b8b2c1c238097a394fb0e602d3427&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;오픈트레이싱을 통한 분산 트레이싱&lt;/u&gt;&lt;/span&gt; : 예거 &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-gray);&quot; class=&quot;highlighted-color color-gray&quot;&gt;jaeger&lt;/span&gt; 트레이싱 대시보드 확인 - 가장 최근의 호출 목록과 그 호출의 분산 트레이싱 스팬 확인 가능.&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380f2b452f2f3839d4a97&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;이스티오 서비스 프록시가 서비스 간에 트레이싱 ID와 메타데이터를 전파하고 트레이싱 엔진(zipkin, jaeger)에 트레이싱 스팬 정보를 보냈다는 것만 이해하면 된다. 중요한 사실은 이 기능에 애플리케이션의 역할이 크지 않다는 점이다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380a58109efc18904360e&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오가 트레이스를 서비스 간에, 그리고 트레이싱 엔진에 전파&lt;/span&gt;&lt;/span&gt;할 수 있지만, &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;애플리케이션 내에서 트레이싱 메타데이터를 전파할 책임은 애플리케이션 자신&lt;/span&gt;&lt;/span&gt;에게 있다. 트레이싱 메타데이터는 보통 HTTP 헤더 집합으로 이뤄져 있고 들어오는 헤더와 나가는 요청을 연관시키는 것은 애플리케이션에게 달려 있다. 달리 말하면, 이스티오는 특정 서비스나 애플리케이션 내에서 무슨 일이 일어나는지 알 수 없으므로, 드나드는 요청이 어떻게 연결되는지(인과 관계)를 알 수 없다.&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380f38223cdff4162db6c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: var(--color-text-red);&quot; class=&quot;highlighted-color color-red&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;인과 관계를 알고 내보내는 요청에 헤더를 적절히 주입하는 것은 애플리케이션의 역할&lt;/span&gt;&lt;/span&gt;이다. &lt;span style=&quot;box-sizing: border-box; color: var(--color-text-blue);&quot; class=&quot;highlighted-color color-blue&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;이스티오는 그 이후부터 해당 스팬들을 포착해 트레이싱 엔진으로 보낼 수&lt;/span&gt;&lt;/span&gt; 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c23804d806dfa68d8a30b4c&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/2b36fb5b-6fb2-4849-9597-4c5895bf78b0/CleanShot_2025-04-05_at_16.42.58.png?table=block&amp;amp;id=1d2b8b2c-1c23-804d-806d-fa68d8a30b4c&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=aP9sfu9luHziB3Qr9zBVv_ONglt1OH-6bu0heiY2mdc&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;405.6359743040685&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23809ab764dc778e26c72b&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/f231260a-5e47-4291-9069-1d2ffcc3502b/CleanShot_2025-04-05_at_16.43.48.png?table=block&amp;amp;id=1d2b8b2c-1c23-809a-b764-dc778e26c72b&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=K4EFhLrQE4-KOJnwwu78TVCrzi6GQeiqWn9UG-cxWdE&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;358.58071390516784&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380fc96eff3fc49ce155d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d2b8b2c1c2380478519face81510355&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;kiali&lt;/u&gt;&lt;/span&gt; 확인 : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;메트릭&lt;/span&gt;(프로메테우스)과 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;트레이싱&lt;/span&gt;(zipkin, jaeger, tempo)을 수집하여 해당 정보를 기반으로 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;시각화!&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;block-1d2b8b2c1c238012905ee60d420b7d07&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://kiali.io/docs/architecture/architecture/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/d5805968-80d3-4fbc-94a8-cfff3f9084bf/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-8012-905e-e60d420b7d07&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=lUovJ0m9QQiJg5Lx2U95aoy8iyxFG4zUzWgHi7z3244&quot; alt=&quot;https://kiali.io/docs/architecture/architecture/&quot; width=&quot;720&quot; height=&quot;627.0355731225296&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380fbbe79cbc266dd9fd3&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;By default, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Kiali&lt;/span&gt; assumes that Prometheus is available at the &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;URL&lt;/span&gt; of the form&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;http://prometheus.&amp;lt;istio_namespace_name&amp;gt;:9090&lt;/code&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kiali.io/docs/configuration/p8s-jaeger-grafana/prometheus/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c23803bad84ec799151a915&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;By default, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Kiali&lt;/span&gt; will try to reach Jaeger at the&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt; GRPC-enabled URL &lt;/span&gt;of the form&amp;nbsp;&lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;http://tracing.&amp;lt;istio_namespace_name&amp;gt;:16685/jaeger&lt;/code&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://kiali.io/docs/configuration/p8s-jaeger-grafana/tracing/jaeger/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;block-1d2b8b2c1c2380ba9620d50e73e065f2&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Namespace&lt;/span&gt; 를 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istioincation&lt;/span&gt; 로 선택 후 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Graph&lt;/span&gt; (Traffic, Versioned app graph) 에서 &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Display&lt;/span&gt; 옵션 중 &amp;lsquo;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Traffic Distribution&lt;/span&gt;&amp;rsquo; 과 &amp;lsquo;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Traffic Animation&lt;/span&gt;&amp;rsquo; 활성화! , &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Service nods&lt;/span&gt;, &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Security&lt;/span&gt; 체크 해보자 (Last 1m, Evety 10s)&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380ffaf95dc76cf89c217&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/d97015a2-f77d-405b-8f10-d14f599adb73/CleanShot_2025-04-06_at_14.25.32.png?table=block&amp;amp;id=1d2b8b2c-1c23-80ff-af95-dc76cf89c217&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=_Qizcty25_GrU7dz6vClDq2sjEr5T0_H5PVVoECyhWc&quot; alt=&quot;image&quot; width=&quot;816&quot; height=&quot;235.74780526735836&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238084b144c5e19f30bc6e&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380e989a2c2ce7c2bae19&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2.6.2 Istio for resiliency -&lt;/span&gt; catalog에 의도적으로 500에러를 재현하고 retry로 복원력 높이기&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;p id=&quot;block-1d2b8b2c1c23802db1c0c25a794f0ddb&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;만약 &amp;lsquo;간헐적/일시적 네트워크 오류&amp;rsquo;가 발생하여 webapp 은 catalog 요청 실패이 실패하는 경우가 발생 시, 애플리케이션 코드 수정 없이 복원력을 높여보자!&lt;/p&gt;
&lt;div id=&quot;block-1d2b8b2c1c23802f8d74dc87cb2e5e73&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/e0260331-093e-4393-b42c-bd95bdd69f4a/CleanShot_2025-04-05_at_16.44.25.png?table=block&amp;amp;id=1d2b8b2c-1c23-802f-8d74-dc87cb2e5e73&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=8gIefHzXOFiEI-7gxoEMTH19NyjKuT-OTi-NY-m8C_8&quot; alt=&quot;image&quot; width=&quot;397.99713134765625&quot; height=&quot;210.99847918179768&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23807d9eecee51fe8657c8&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;bin/chaos.sh {에러코드} {빈도} - &lt;code class=&quot;code&quot; style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace, Courier; border-radius: 5px; background-color: var(--color-code-bg); color: #ff4081; font-size: 0.9em; padding: 0.2em 0.4em; word-break: break-word;&quot;&gt;chaos.sh 500 50&lt;/code&gt; (500에러를 50% 빈도로 재현)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238070993df45c6746a312&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;#
docker exec -it myk8s-control-plane bash
----------------------------------------
# istioinaction 로 네임스페이스 변경
cat /etc/kubernetes/admin.conf
kubectl config set-context $(kubectl config current-context) --namespace=istioinaction
cat /etc/kubernetes/admin.conf

cd /istiobook/bin/ 
./chaos.sh 500 100 # 모니터링 : kiali, grafana, tracing

./chaos.sh 500 50 # 모니터링 : kiali, grafana, tracing


kubectl config set-context $(kubectl config current-context) --namespace=default
cat /etc/kubernetes/admin.conf
----------------------------------------
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380d680c3e29ed8a032ee&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/5696461e-24ab-451a-8418-5210a8f9a49f/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-80d6-80c3-e29ed8a032ee&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=mJYHz78fd31VpeKhURLXsTQ-ip8RyVl0BYrC8tzKmQw&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;394.06232294617564&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380d6901ed45d06e6ff86&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/5fbec1e2-ea93-4f61-a23c-4ef67067a917/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-80d6-901e-d45d06e6ff86&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=bhs-8WGYaeWPP2Pk7gvyiG7DhjzUzxTiPB-2fg5j_dI&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;657.3913043478261&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380d4b71af6865ee02386&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/d89b88ea-13b6-460d-8a72-74dbefb9bf44/CleanShot_2025-04-06_at_14.44.16.png?table=block&amp;amp;id=1d2b8b2c-1c23-80d4-b71a-f6865ee02386&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=lj9uv3Ji16FVSiirf7rqBzIZ4XXi2QA5HlEG42JuZdE&quot; alt=&quot;Tags 에 error=true 필터링&quot; width=&quot;864&quot; height=&quot;332.37881219903693&quot; /&gt;Tags 에 error=true 필터링&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380c199baf123f0761c2f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d2b8b2c1c2380e89a1ef31106874007&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Kiali 대시보드 - red (Error) / blue (total req.)&lt;/p&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380249ef6db7add672386&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/9fc14edf-1c40-4633-924a-4c6e5098f6c8/CleanShot_2025-04-05_at_17.09.21.png?table=block&amp;amp;id=1d2b8b2c-1c23-8024-9ef6-db7add672386&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=-2GC0-Q30aAIsC0TT41o4EXpHXY6v68h1QOydhNo1F0&quot; alt=&quot;image&quot; width=&quot;864&quot; height=&quot;359.8217821782178&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380f0b1aaf430fa3360e9&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d2b8b2c1c23808e92dae767580eeae9&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;에러 발생 시 reslience 하게 retry 하도록 애플리케이션 코드 수정 없이 해보기!&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;block-1d2b8b2c1c2380d8a0e4fa07cd101212&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;Resiliency 하게 해보자 &amp;rArr; proxy(envoy)에 endpoint(catalog) 5xx 에러 시 retry 적용&lt;/p&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380abb1dff6e3d31b5ca1&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;properties&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# catalog 3번까지 요청 재시도 할 수 있고, 각 시도에는 2초의 제한 시간이 있음.
cat &amp;lt;&amp;lt;EOF | kubectl -n istioinaction apply -f -
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: catalog
spec:
  hosts:
  - catalog
  http:
  - route:
    - destination:
        host: catalog
    retries:
      attempts: 3
      retryOn: 5xx
      perTryTimeout: 2s
EOF

kubectl get vs -n istioinaction
NAME                    GATEWAYS                 HOSTS         AGE
catalog                                          [&quot;catalog&quot;]   5s
webapp-virtualservice   [&quot;outfitters-gateway&quot;]   [&quot;*&quot;]         24m

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1d2b8b2c1c2380e59d2febeb818d14a5&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;결과적으로 client 에 응답 성공율이 높아졌다!&lt;/p&gt;
&lt;div id=&quot;block-1d2b8b2c1c238078b9efce1dde1a95de&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/5696af94-c032-49e9-ac86-2496659ce00b/CleanShot_2025-04-05_at_17.17.07.png?table=block&amp;amp;id=1d2b8b2c-1c23-8078-b9ef-ce1dde1a95de&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=F7BDYMmPWqEKkYsngqOQ5iD4KyRXb7IKmy0oMa112lo&quot; alt=&quot;image&quot; width=&quot;1296&quot; height=&quot;487.32203389830505&quot; /&gt;&lt;/div&gt;
&lt;p id=&quot;block-1d2b8b2c1c23803297f3c9fa8c2b2d28&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;그라파나 (Istio Mesh Dashboard) : retry 적용 후 Success Rate은 증가하고 5xx 에러는 감소하는 것을 확인할 수 있습니다&lt;/p&gt;
&lt;div id=&quot;block-1d2b8b2c1c238064a33ed99ab44e32af&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/e6a70d62-dc1c-4c3a-a33c-2a9f02db13ad/CleanShot_2025-04-05_at_17.21.17.png?table=block&amp;amp;id=1d2b8b2c-1c23-8064-a33e-d99ab44e32af&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=VXz4Un-fqQtoVueQ4oGUDkHwCQZ-1vZZ24uu888zd3k&quot; alt=&quot;image&quot; width=&quot;1248&quot; height=&quot;477.13591160220994&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380b5b720edc059041156&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238082ba88cfe7e580db3a&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;2.6.3 Istio for Traffic Routing -&lt;/span&gt; 새 기능 추가 시나리오 대응&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380478fa1c11ed5e4b2d3&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/af181ea5-ad88-48a8-bdfd-7bb7d222e35b/CleanShot_2025-04-08_at_15.57.02.png?table=block&amp;amp;id=1d2b8b2c-1c23-8047-8fa1-c11ed5e4b2d3&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=KFW8uaF9kXRvl2wwpPajcA6Yzkt_SkTKcBEHfaeclWA&quot; alt=&quot;image&quot; width=&quot;912&quot; height=&quot;464.35602094240835&quot; /&gt;&lt;/div&gt;
&lt;p id=&quot;block-1d2b8b2c1c23805cac01d7a8e6cfbc3f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;특정 사용자 집단만 새 배포로 라우팅하도록, 릴리즈에 단계적 접근 : catalog v2 에 imageUrl 새 속성 추가&lt;/p&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380aba3f1e30d95dd5919&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# catalog v2 배포
cat &amp;lt;&amp;lt;EOF | kubectl -n istioinaction apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: catalog
    version: v2
  name: catalog-v2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: catalog
      version: v2
  template:
    metadata:
      labels:
        app: catalog
        version: v2
    spec:
      containers:
      - env:
        - name: KUBERNETES_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: SHOW_IMAGE
          value: &quot;true&quot;
        image: istioinaction/catalog:latest
        imagePullPolicy: IfNotPresent
        name: catalog
        ports:
        - containerPort: 3000
          name: http
          protocol: TCP
        securityContext:
          privileged: false
EOF

# (옵션) 500 에러 발생 꺼두기
docker exec -it myk8s-control-plane bash
----------------------------------------
cd /istiobook/bin/
./chaos.sh 500 delete
exit
----------------------------------------

#
kubectl get deploy,pod,svc,ep -n istioinaction
kubectl get gw,vs -n istioinaction

# v1, v2 catalog pod가 존재하고
kubectl get po -n istioinaction -o wide
NAME                          READY   STATUS    RESTARTS   AGE    IP           NODE                  NOMINATED NODE   READINESS GATES
catalog-6cf4b97d-d5xbt        2/2     Running   0          43m    10.10.0.13   myk8s-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;
catalog-v2-6df885b555-pdcts   2/2     Running   0          103s   10.10.0.16   myk8s-control-plane   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;

# catalog service는 rb로 v1, v2 catalog pod로 접근
kubectl get ep -n istioinaction
NAME                ENDPOINTS                         AGE
endpoints/catalog   10.10.0.13:3000,10.10.0.16:3000   42m
endpoints/webapp    10.10.0.14:8080                   42m

# 반복 접속 종료해두기&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380778f91f6c668644787&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/4fb5a8bf-a93b-4e88-8118-8ff740e78039/image.png?table=block&amp;amp;id=1d2b8b2c-1c23-8077-8f91-f6c668644787&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=VPz_XVb7KEZuVDmmeFykKPn7YxrfZe28w5OywJ0I4Q4&quot; alt=&quot;image&quot; width=&quot;768&quot; height=&quot;542.7486033519552&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c23800383f4cbc421b5f0f0&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/f33b1dc1-37d7-47a4-995b-12ffc76fd082/CleanShot_2025-04-05_at_17.54.33.png?table=block&amp;amp;id=1d2b8b2c-1c23-8003-83f4-cbc421b5f0f0&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=KJmVyg6hU6XIm9fD1Jh9zd23dovd--vMMi9ndZItHak&quot; alt=&quot;image&quot; width=&quot;768&quot; height=&quot;313.73797678275287&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380adbecfe9fd0435a16f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d2b8b2c1c238025addfe2d2bd32f911&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;v1만 접속 설정&lt;/p&gt;
&lt;div id=&quot;block-1d2b8b2c1c23807799b1cfe05b1986a4&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# host가 catalog인 service에 대해서 destinationrule 설정
# version-1 subset은 v1 catalog로 version-2라는 subset은 v2 catalog로
cat &amp;lt;&amp;lt;EOF | kubectl -n istioinaction apply -f -
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: catalog
spec:
  host: catalog
  subsets:
  - name: version-v1
    labels:
      version: v1
  - name: version-v2
    labels:
      version: v2
EOF

#
kubectl get gw,vs,dr -n istioinaction

# 반복 접속 : v1,v2 분산 접속 확인
while true; do curl -s http://127.0.0.1:30000/api/catalog | jq; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done


# v1 라우팅 VS 수정(업데이트)
cat &amp;lt;&amp;lt;EOF | kubectl -n istioinaction apply -f -
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: catalog
spec:
  hosts:
  - catalog
  http:
  - route:
    - destination:
        host: catalog
        subset: version-v1
EOF

# 반복 접속 : v1 접속 확인
# image url이 없는 v1로만 traffic이 흐른것을 볼 수 있다.
while true; do curl -s http://127.0.0.1:30000/api/catalog | jq; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done
2025-04-12 01:15:38

[
  {
    &quot;id&quot;: 1,
    &quot;color&quot;: &quot;amber&quot;,
    &quot;department&quot;: &quot;Eyewear&quot;,
    &quot;name&quot;: &quot;Elinor Glasses&quot;,
    &quot;price&quot;: &quot;282.00&quot;
  },
  {
    &quot;id&quot;: 2,
    &quot;color&quot;: &quot;cyan&quot;,
    &quot;department&quot;: &quot;Clothing&quot;,
    &quot;name&quot;: &quot;Atlas Shirt&quot;,
    &quot;price&quot;: &quot;127.00&quot;
  },
  {
    &quot;id&quot;: 3,
    &quot;color&quot;: &quot;teal&quot;,
    &quot;department&quot;: &quot;Clothing&quot;,
    &quot;name&quot;: &quot;Small Metal Shoes&quot;,
    &quot;price&quot;: &quot;232.00&quot;
  },
  {
    &quot;id&quot;: 4,
    &quot;color&quot;: &quot;red&quot;,
    &quot;department&quot;: &quot;Watches&quot;,
    &quot;name&quot;: &quot;Red Dragon Watch&quot;,
    &quot;price&quot;: &quot;232.00&quot;
  }
]
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c2380759595e59601bca428&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/570036e8-86e9-416a-9b97-9fe87f1aa114/CleanShot_2025-04-05_at_18.02.25.png?table=block&amp;amp;id=1d2b8b2c-1c23-8075-9595-e59601bca428&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=vFo3kdoNBzZD1YqiVg1i56Hvo6eCBp10GZXSFw-0JBs&quot; alt=&quot;image&quot; width=&quot;816&quot; height=&quot;377.40000000000003&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d2b8b2c1c238082b1ebd71987040897&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-1d2b8b2c1c2380d1bf33ec7a914635fe&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px;&quot; data-ke-size=&quot;size16&quot;&gt;특정 헤더는 v2, 그외에는 v1 접속 설정&lt;/p&gt;
&lt;div id=&quot;block-1d2b8b2c1c238035b40bfcedad24b184&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code&gt;# 라우팅 VS 수정(업데이트)
cat &amp;lt;&amp;lt;EOF | kubectl -n istioinaction apply -f -
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: catalog
spec:
  hosts:
  - catalog
  http:
  - match:
    - headers:
        x-dark-launch:
          exact: &quot;v2&quot;
    route:
    - destination:
        host: catalog
        subset: version-v2
  - route:
    - destination:
        host: catalog
        subset: version-v1
EOF

#
kubectl get gw,vs,dr -n istioinaction

# 반복 접속 : v1 접속 확인
while true; do curl -s http://127.0.0.1:30000/api/catalog | jq; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done

# 반복 접속 : v2 접속 확인
while true; do curl -s http://127.0.0.1:30000/api/catalog -H &quot;x-dark-launch: v2&quot; | jq; date &quot;+%Y-%m-%d %H:%M:%S&quot; ; sleep 1; echo; done

# 다시 roundrobin(50:50)으로 routing되도록 vs 수정
# subset을 삭제하면 원래대로 rb로 v1, v2 반복 접속 됨
cat &amp;lt;&amp;lt;EOF | kubectl -n istioinaction apply -f -
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: catalog
spec:
  hosts:
  - catalog
  http:
  - route:
    - destination:
        host: catalog&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;notion-numbered-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: decimal;&quot; start=&quot;3&quot; type=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380c0a5c2c51818813e52&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;Istio 최신 버전 실습&lt;/li&gt;
&lt;/ol&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380e8a477fc9d0ab94daa&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;실습 환경 : &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;docker &lt;/span&gt;(&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;kind&lt;/span&gt; - k8s 1.32.2) , &lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;istio&lt;/span&gt; 1.25.1&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-1d3b8b2c1c23803c8f79e31792f0671d&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.1. kind : k8s(1.23.17) 배포&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c238009963ad7ea181cfbde&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 
kind create cluster --name myk8s --image kindest/node:v1.32.2 --config - &amp;lt;&amp;lt;EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000 # Sample Application
    hostPort: 30000
  - containerPort: 30001 # Prometheus
    hostPort: 30001
  - containerPort: 30002 # Grafana
    hostPort: 30002
  - containerPort: 30003 # Kiali
    hostPort: 30003
  - containerPort: 30004 # Tracing
    hostPort: 30004
  - containerPort: 30005 # kube-ops-view
    hostPort: 30005
networking:
  podSubnet: 10.10.0.0/16
  serviceSubnet: 10.200.1.0/24
EOF

# 설치 확인
docker ps

# 노드에 기본 툴 설치
docker exec -it myk8s-control-plane sh -c 'apt update &amp;amp;&amp;amp; apt install tree psmisc lsof wget bridge-utils net-tools dnsutils tcpdump ngrep iputils-ping git vim -y'
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23802e9844d873774a3b09&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(옵션) 편의성 툴 설치&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b08b54cb708dfec8ee&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;
# (옵션) kube-ops-view
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30005 --set env.TZ=&quot;Asia/Seoul&quot; --namespace kube-system
kubectl get deploy,pod,svc,ep -n kube-system -l app.kubernetes.io/instance=kube-ops-view

## kube-ops-view 접속 URL 확인
open &quot;http://localhost:30005/#scale=1.5&quot;
open &quot;http://localhost:30005/#scale=1.3&quot;

# (옵션) metrics-server
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm install metrics-server metrics-server/metrics-server --set 'args[0]=--kubelet-insecure-tls' -n kube-system
kubectl get all -n kube-system -l app.kubernetes.io/instance=metrics-server&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238023a6b1d29816d346e2&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380ee80fadd5532825572&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.2. istio 1.25.1 설치&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/setup/getting-started/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;GettingStarted&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/setup/install/istioctl/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;install&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/setup/additional-setup/config-profiles/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;profile&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://formulae.brew.sh/formula/istioctl&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;brew&lt;/a&gt; , &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://github.com/istio/istio&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Github&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380c79715efedba1a534e&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;방법 1 : mac&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380f6a553d9c7488e03e5&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;brew install istioctl
istioctl version --remote=false

#
export ISTIOV=1.25.1
curl -s -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIOV sh -

# 샘플 코드 확인
cd istio-$ISTIOV
tree
code .

# default 프로파일 배포
cat &amp;lt;&amp;lt;EOF | istioctl install -y -f - 
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: demo
  components:
    ingressGateways:
    - name: istio-ingressgateway
      enabled: true
    egressGateways:
    - name: istio-egressgateway
      enabled: false
EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380358389dc273e8ae8bb&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23805fb758f25855dcb99c&quot; class=&quot;notion-toggle closed&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms;&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;방법 2 : Linux os WSL2 (Ubuntu)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23809dae6ddde023da6e43&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;공통 설정 : addon 등 설치&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c238043b7c6d78bfa002580&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 설치 확인 : istiod(데몬, 컨트롤플레인), istio-ingressgateway, crd 등
kubectl get all,svc,ep,sa,cm,secret,pdb -n istio-system
kubectl get crd | grep istio.io | sort

# istio-ingressgateway 서비스 NodePort 변경 및 nodeport 30000로 지정 변경
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 8080, &quot;nodePort&quot;: 30000}]}}'
kubectl get svc -n istio-system istio-ingressgateway

# istio-ingressgateway 서비스 externalTrafficPolicy 설정 : ClientIP 수집 확인 용도
# externalTrafficPolicy: Local이면, node1의 nodeport로 들어온 request는 node1의 pod로 가도록 iptables rule이 설정된다. node2의 nodeport로 들어오면 node2의 pod로 routing됨. 
kubectl patch svc -n istio-system istio-ingressgateway -p '{&quot;spec&quot;:{&quot;externalTrafficPolicy&quot;: &quot;Local&quot;}}'
kubectl describe svc -n istio-system istio-ingressgateway


# default 네임스페이스에 istio-proxy sidecar 주입 설정 - Docs
kubectl label namespace default istio-injection=enabled
kubectl get ns --show-labels


# addon 설치
kubectl apply -f samples/addons
kubectl rollout status deployment/kiali -n istio-system

#
kubectl get pod,svc -n istio-system

# NodePort 변경 및 nodeport 30001~30003으로 변경 : prometheus(30001), grafana(30002), kiali(30003), tracing(30004)
kubectl patch svc -n istio-system prometheus -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 9090, &quot;targetPort&quot;: 9090, &quot;nodePort&quot;: 30001}]}}'
kubectl patch svc -n istio-system grafana -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 3000, &quot;targetPort&quot;: 3000, &quot;nodePort&quot;: 30002}]}}'
kubectl patch svc -n istio-system kiali -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 20001, &quot;targetPort&quot;: 20001, &quot;nodePort&quot;: 30003}]}}'
kubectl patch svc -n istio-system tracing -p '{&quot;spec&quot;: {&quot;type&quot;: &quot;NodePort&quot;, &quot;ports&quot;: [{&quot;port&quot;: 80, &quot;targetPort&quot;: 16686, &quot;nodePort&quot;: 30004}]}}'

# Prometheus 접속 : envoy, istio 메트릭 확인
open http://127.0.0.1:30001

# Grafana 접속
open http://127.0.0.1:30002

# Kiali 접속 1 : NodePort
open http://127.0.0.1:30003

# (옵션) Kiali 접속 2 : Port forward
kubectl port-forward deployment/kiali -n istio-system 20001:20001 &amp;amp;
open http://127.0.0.1:20001

# tracing 접속 : 예거 트레이싱 대시보드
open http://127.0.0.1:30004
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23806e9958c8f25e91bf1f&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380edb314c18649455471&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.3. Bookinfo sample application 배포&lt;/span&gt; - &lt;a class=&quot;notion-link link&quot; style=&quot;box-sizing: border-box; text-decoration-thickness: 1px; text-decoration-color: var(--color-text-default-light); color: inherit; text-underline-offset: 2px; opacity: 0.7; transition: border-color 100ms ease-in, opacity 100ms ease-in;&quot; href=&quot;https://istio.io/latest/docs/setup/getting-started/#bookinfo&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Docs&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23802ebabbf423e5154757&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%;&quot;&gt;&lt;a class=&quot;notion-link&quot; style=&quot;box-sizing: border-box; text-decoration-line: none; color: inherit;&quot; href=&quot;https://istio.io/latest/docs/examples/bookinfo/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/dc6e02c8-bf76-4440-82cb-5535fc2a1714/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-802e-babb-f423e5154757&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=FZVOjSB2OHsptDBfE-y-qnvvOEP5bEQP1IiTEX5hSBw&quot; alt=&quot;https://istio.io/latest/docs/examples/bookinfo/&quot; width=&quot;661.9744262695312&quot; height=&quot;452.98250015120493&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23807481a2c78b52bb7611&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;#
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

# 확인 : 서비스 어카운트(sa)는 spiffe 에 svid 에 사용됨
kubectl get all,sa

# product 웹 접속 확인
kubectl exec &quot;$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')&quot; -c ratings -- curl -sS productpage:9080/productpage | grep -o &quot;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&quot;

# productpage 파드 로그
kubectl logs -l app=productpage -c istio-proxy --tail=-1
kubectl logs -l app=productpage -c productpage -f
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380fe80b1e16c9df160aa&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380609705d3c246af08e8&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;3.4. Open the application to outside traffic&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23807d9e24c389b10bcf96&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# 현재 cluster에 배포되어있는 istio-ingressgateway pod 정보
# label에 istio=ingressgateway 설정이 되어있다.
# 이후에 istio ingressgateway 생성시 해당 label을 selector로 등록해서 생성하면 해당 Ingressgateway pod(=use istio default controller)가 traffic을 받아 routing 한다.
# Gateway는 VirtualService에 등록된 .spec.http[].match 및 .spec.http[].route 설정대로 traffic을 routing 한다. 
kubectl describe po -n istio-system istio-ingressgateway-7ffc97b8c6-qqjvs        
Name:             istio-ingressgateway-7ffc97b8c6-qqjvs
Namespace:        istio-system
Priority:         0
Service Account:  istio-ingressgateway-service-account
Node:             myk8s-control-plane/172.19.0.2
Start Time:       Sat, 12 Apr 2025 21:16:19 +0900
Labels:           app=istio-ingressgateway
                  app.kubernetes.io/instance=istio
                  app.kubernetes.io/managed-by=Helm
                  app.kubernetes.io/name=istio-ingressgateway
                  app.kubernetes.io/part-of=istio
                  app.kubernetes.io/version=1.0.0
                  chart=gateways
                  helm.sh/chart=istio-ingress-1.0.0
                  heritage=Tiller
                  install.operator.istio.io/owning-resource=unknown
                  istio=ingressgateway
                  istio.io/dataplane-mode=none
                  istio.io/rev=default
                  operator.istio.io/component=IngressGateways
                  pod-template-hash=7ffc97b8c6
                  release=istio
                  service.istio.io/canonical-name=istio-ingressgateway
                  service.istio.io/canonical-revision=latest
                  sidecar.istio.io/inject=false
...


# Istio Gateway/VirtualService 설정
# default istio controller(pod)를 사용하는 bookinfo-gateway와 해당 gateway와 mapping되는 bookinfo virtualservice 생성
# bookinfo virtualservice는 모든 match되는 rule에 대해서 productpage service로 traffic을 routing 한다. 
cat samples/bookinfo/networking/bookinfo-gateway.yaml
apiVersion: networking.istio.io/v1
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  # The selector matches the ingress gateway pod labels.
  # If you installed Istio using Helm following the standard documentation, this would be &quot;istio=ingress&quot;
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 8080
      name: http
      protocol: HTTP
    hosts:
    - &quot;*&quot;
---
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:
  - &quot;*&quot;
  gateways:
  - bookinfo-gateway
  http:
  - match:
    - uri:
        exact: /productpage
    - uri:
        prefix: /static
    - uri:
        exact: /login
    - uri:
        exact: /logout
    - uri:
        prefix: /api/v1/products
    route:
    - destination:
        host: productpage
        port:
          number: 9080
          
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

# Istio Gateway/VirtualService 설정 확인
kubectl get gw,vs
istioctl proxy-status

# productpage 파드의 istio-proxy 로그 확인 Access log 가 출력 - Default access log format : 링크
kubectl logs -l app=productpage -c istio-proxy -f
kubectl stern -l app=productpage

# productpage 웹 접속 : 새로고침
open http://127.0.0.1:30000/productpage
curl -v -s http://127.0.0.1:30000/productpage | grep -o &quot;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&quot;

# 반복 접속
for i in {1..10};  do curl -s http://127.0.0.1:30000/productpage | grep -o &quot;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&quot; ; done
for i in {1..100}; do curl -s http://127.0.0.1:30000/productpage | grep -o &quot;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&quot; ; done

while true; do curl -s http://127.0.0.1:30000/productpage | grep -o &quot;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&quot; ; echo &quot;--------------&quot; ; sleep 1; done
while true; do curl -s http://127.0.0.1:30000/productpage | grep -o &quot;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&quot; ; echo &quot;--------------&quot; ; sleep 0.5; done
while true; do curl -s http://127.0.0.1:30000/productpage | grep -o &quot;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&quot; ; echo &quot;--------------&quot; ; sleep 0.1; done
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23807bb80ce1a91dbf18de&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/6625d29b-c2a5-4e2a-aaac-f3a7c7689eb1/CleanShot_2025-04-06_at_15.55.08.png?table=block&amp;amp;id=1d3b8b2c-1c23-807b-b80c-e1a91dbf18de&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=jqVR7_bYJhKVuuH_M5oPjW7Fq6M_RNcFFydk8jruVFI&quot; alt=&quot;image&quot; width=&quot;960&quot; height=&quot;503.68050117462803&quot; /&gt;&lt;/div&gt;
&lt;ul class=&quot;notion-bulleted-list&quot; style=&quot;box-sizing: border-box; margin: 2px 0px; padding-inline-start: calc(1.5em + 4px); line-height: 1.5; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff; list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380429fb9db2193f34d1c&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;versioned app graph로 변경&lt;/li&gt;
&lt;li id=&quot;block-1d3b8b2c1c2380d89936fe2ae304d234&quot; class=&quot;notion-list-item notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-top: 2px; margin-bottom: 2px; margin-left: 0px; padding-top: 3px; padding-bottom: 3px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word;&quot;&gt;display: Traffic Rate, Traffic Animation, Security enable 하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-1d3b8b2c1c23801982ffc218a3fb3262&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;위의 결과에서 보면 reviews가 v1, v2, v3 새가지 버전이 있다. 그리고 kiali의 traffic graph를 보면 roundrobin하게 균등하게 traffic이 흐르는것을 볼 수 있다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c23807baa7dc3c45fa3323b&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;이는 현재 review service에 대한 virtualservice가 설정되어있지 않고 productpage에서 review로 service(ex&amp;gt; http://review:9080)를 통해서 통신하기 때문에 service의 기본 설정대로 iptables에 33:33:33으로 설정되어 균등하게 v1, v2, v3으로 traffic이 분산되기 때문이다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c23807489c1d0ae58beb6d2&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 review에 대한 virtualservice 설정을 통해 traffic 흐름을 살펴보자!&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c238065adfac0eb49f40b5e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# destination-rule-reviews.yaml
# destinationrule을 통해서 reviews service에 mapping된 upstream pod들에 대해서 lable별로 subsets을 설정 할 수 있다.
# 이를 통해서 VirtualService에서 해당 subset name을 통해서 routing을 설정 할 수 있다.
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  trafficPolicy:
    loadBalancer:
      simple: RANDOM
  subsets:
  - name: v1          # subset.name=v1 reviews-v1 pod를 subset으로 등록
    labels:
      version: v1
  - name: v2          # subset.name=v2 reviews-v2 pod를 subset으로 등록
    labels:
      version: v2
  - name: v3          # subset.name=v3 reviews-v3 pod를 subset으로 등록
    labels:
      version: v3


# virtual-service-reviews-50-v3.yaml
# productpage -&amp;gt; reviews v1에 50% / productpage -&amp;gt; reviews v3에 50% traffic을 보냄
# productpage -&amp;gt; reviews v2에는 0% 즉 traffic이 안흐름
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 50
    - destination:
        host: reviews
        subset: v3
      weight: 50
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23800c8ebded4ac351fcd9&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/d569d61c-5c55-4bf4-bc5b-3665eba6b262/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-800c-8ebd-ed4ac351fcd9&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=_N1kHEl3seG55UE5DDI34n5qfm7hfSvH-7QTgnKz1gw&quot; alt=&quot;image&quot; width=&quot;1152&quot; height=&quot;558.1793392763503&quot; /&gt;&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380b9bacbfbf2c9f50c87&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;이전에 reviews에 대한 DestinationRule과 VirtualService없이 default로 productpage &amp;rarr; reviews로의 traffic 흐름과 달리 reviews v2에는 전혀 traffic이 흐르지 않아서 versioned app graph상에서 삭제 된것을 볼 수 있다.&lt;/p&gt;
&lt;p id=&quot;block-1d3b8b2c1c23805eb40cef6ea759a123&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;이번에는 특정 header 기반으로 routing하도록 VirtualService를 설정해보자!&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380d0ae6bcf744505697b&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-yaml&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# virtual-service-review-jason-v2-v3.yaml
# http header에 end-user: jason이라는 header를 포함하고 있으면 reviews-v2 pod로
# 나머지는 reviews-v3로 routing 하도록 설정한다.
# DestinationRule은 위에 이미 설정했다!
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - match:
    - headers:           # header가 end-user: jason이면
        end-user:
          exact: jason
    route:
    - destination:
        host: reviews   
        subset: v2       # review-v2로 routing
  - route:
    - destination:
        host: reviews
        subset: v3&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c2380f4b0cdd33c1c88f78d&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;현재 위에서 아래와 같이 while문을 통해서 productpage web으로 반복접근 중이고, 해당 request는 아무 http header를 포함하고 있지 않기 때문에 kiali versioned app graph상에는 reviews-v3으로만 traffic이 흐르는것으로 보인다!&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c23809895efeafeb1b6e72e&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt; while true; do curl -s http://127.0.0.1:30000/productpage | grep -o &quot;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&quot; ; echo &quot;--------------&quot; ; sleep 1; done&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23809ca86afd555f97d274&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/bd339465-e87c-471b-bcc7-8de1fdaf9ac5/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-809c-a86a-fd555f97d274&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=B2jl6TisgM6s5g1g2UeR7V8_YSLY6pSm08psZwheGa4&quot; alt=&quot;image&quot; width=&quot;1056&quot; height=&quot;497.3347412882788&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b9b813d8fb35be1e92&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# netshoot pod 접속
kubectl exec -it netshoot -- zsh

# 반복 접속 : v2 접속 확인
netshoot  ~  while true; do curl -s http://reviews:9080/reviews/0 -H &quot;end-user: jason&quot; | jq .; echo &quot;--------------&quot; ; sleep 1; done&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238034888cf3e0254de6f2&quot; class=&quot;notion-image align-start normal&quot; style=&quot;box-sizing: border-box; margin-top: 0.5rem; margin-bottom: 0.5rem; align-items: start; position: relative; line-height: 0px; display: flex; flex-direction: column; max-width: 100%; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&lt;img style=&quot;box-sizing: border-box; object-fit: contain; border-radius: var(--image-border-radii);&quot; src=&quot;https://file.notion.so/f/f/dd85ac3f-df24-4db9-a158-776df3a12768/e5b58e66-fd42-4b25-b3a8-30e23aa1b404/image.png?table=block&amp;amp;id=1d3b8b2c-1c23-8034-888c-f3e0254de6f2&amp;amp;spaceId=dd85ac3f-df24-4db9-a158-776df3a12768&amp;amp;expirationTimestamp=1744488000000&amp;amp;signature=b_zXHvjiamIuNc3Ggl4yOkZ8qtz37uGSuLKeCj5pyEQ&quot; alt=&quot;image&quot; width=&quot;1056&quot; height=&quot;458.0441640378549&quot; /&gt;&lt;/div&gt;
&lt;p id=&quot;block-1d3b8b2c1c238095addbdd612d7e248f&quot; class=&quot;notion-text notion-text__content notion-semantic-string&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; min-height: 2rem; padding: 3px 2px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;기존에 productpage로 향하던 반복 요청을 중단하고 netshoot pod에서 &amp;ldquo;end-user: jason&amp;rdquo; http header를 담아서 reviews service에 직접 요청하면 위와 같이 모든 request가 reviews-v2 pod로 가는것을 확인 할 수 있다!&lt;/p&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380ac90f1ed3f5e85c04c&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c2380b48e49d25b32adb993&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(참고) istio-ingressgateway 에 istio-proxy 에도 로깅 변경 해보자&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23801182bae1334403c143&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;kubectl exec -it deploy/istio-ingressgateway -n istio-system -- curl -X POST http://localhost:15000/logging
kubectl exec -it deploy/istio-ingressgateway -n istio-system -- curl -X POST http://localhost:15000/logging?http=debug
kubectl exec -it deploy/istio-ingressgateway -n istio-system -- curl -X POST http://localhost:15000/logging?http=info&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c23801cbd7fd41852ad1b0d&quot; class=&quot;notion-text&quot; style=&quot;box-sizing: border-box; min-height: 2rem;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block-1d3b8b2c1c238090ab7fdb9844f14e31&quot; class=&quot;notion-toggle open&quot; style=&quot;box-sizing: border-box; margin: 1px 0px; color: #37352f; font-family: Inter, Inter-fallback, Helvetica, 'Apple Color Emoji', 'Segoe UI Emoji', NotoColorEmoji, 'Noto Color Emoji', 'Segoe UI Symbol', 'Android Emoji', EmojiSymbols, -apple-system, 'system-ui', 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', sans-serif; background-color: #ffffff;&quot;&gt;
&lt;div class=&quot;notion-toggle__summary&quot; style=&quot;box-sizing: border-box; cursor: pointer; padding: 3px 0px; list-style: none; display: flex;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; margin-right: 6px; user-select: none; margin-top: 3px; cursor: pointer;&quot;&gt;
&lt;div class=&quot;notion-toggle__trigger_icon&quot; style=&quot;box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 1.75rem; border-radius: 2px; width: 1.5rem; height: 1.5rem;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; transition: 250ms; transform: rotate(90deg);&quot;&gt;‣&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;box-sizing: border-box; line-height: 1.5rem; white-space-collapse: preserve; word-break: break-word; padding-inline-start: 0px; margin: 3px 2px;&quot; class=&quot;notion-semantic-string&quot;&gt;(참고) istio-proxy 파드에 envoy 컨테이너 admin 페이지 접속&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;notion-toggle__content&quot; style=&quot;box-sizing: border-box; padding-inline-start: calc(1.5em + 4px);&quot;&gt;
&lt;div id=&quot;block-1d3b8b2c1c23801aa840cd00dc8d4439&quot; class=&quot;notion-code no-wrap&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;&lt;button class=&quot;notion-code__copy-button&quot; style=&quot;color-scheme: unset; forced-color-adjust: unset; mask: unset; math-depth: unset; position: absolute; position-anchor: unset; text-size-adjust: unset; appearance: unset; font-family: unset; font-feature-settings: unset; font-kerning: unset; font-optical-sizing: unset; font-palette: unset; font-size: 0.75rem; font-size-adjust: unset; font-stretch: unset; font-style: unset; font-synthesis: unset; font-variant: unset; font-variation-settings: unset; font-weight: unset; position-area: unset; text-orientation: unset; text-rendering: unset; text-spacing-trim: unset; -webkit-font-smoothing: unset; -webkit-locale: unset; -webkit-text-orientation: unset; -webkit-writing-mode: unset; writing-mode: unset; zoom: unset; accent-color: unset; place-content: unset; align-items: center; place-self: unset; alignment-baseline: unset; anchor-name: unset; anchor-scope: unset; animation-composition: unset; animation: unset; app-region: unset; aspect-ratio: unset; backdrop-filter: unset; backface-visibility: unset; background-blend-mode: unset; baseline-shift: unset; baseline-source: unset; block-size: unset; border-block: unset; border: unset; border-radius: 4px; border-collapse: unset; border-end-end-radius: unset; border-end-start-radius: unset; border-inline: unset; border-start-end-radius: unset; border-start-start-radius: unset; bottom: unset; box-decoration-break: unset; box-shadow: unset; box-sizing: unset; break-after: unset; break-before: unset; break-inside: unset; buffered-rendering: unset; caption-side: unset; caret-color: unset; clear: unset; clip: unset; clip-path: unset; clip-rule: unset; color-interpolation: unset; color-interpolation-filters: unset; color-rendering: unset; columns: unset; column-fill: unset; gap: unset; column-rule: unset; column-span: unset; contain: unset; contain-intrinsic-block-size: unset; contain-intrinsic-size: unset; contain-intrinsic-inline-size: unset; container: unset; content: unset; content-visibility: unset; counter-increment: unset; counter-reset: unset; counter-set: unset; cursor: pointer; cx: unset; cy: unset; d: unset; display: flex; dominant-baseline: unset; empty-cells: unset; field-sizing: unset; fill: unset; fill-opacity: unset; fill-rule: unset; filter: unset; flex: unset; flex-flow: unset; float: unset; flood-color: unset; flood-opacity: unset; grid: unset; grid-area: unset; height: unset; hyphenate-character: unset; hyphenate-limit-chars: unset; hyphens: unset; image-orientation: unset; image-rendering: unset; initial-letter: unset; inline-size: unset; inset-block: unset; inset-inline: unset; interpolate-size: unset; isolation: unset; justify-items: unset; left: unset; letter-spacing: unset; lighting-color: unset; line-break: unset; line-height: unset; list-style: unset; margin-block: unset; margin: unset; margin-inline: unset; marker: unset; mask-type: unset; math-shift: unset; math-style: unset; max-block-size: unset; max-height: unset; max-inline-size: unset; max-width: unset; min-block-size: unset; min-height: unset; min-inline-size: unset; min-width: unset; mix-blend-mode: unset; object-fit: unset; object-position: unset; object-view-box: unset; offset: unset; opacity: 0; order: unset; orphans: unset; outline: unset; outline-offset: unset; overflow-anchor: unset; overflow-clip-margin: unset; overflow-wrap: unset; overflow: unset; overlay: unset; overscroll-behavior-block: unset; overscroll-behavior-inline: unset; overscroll-behavior: unset; padding-block: unset; padding: 4px; padding-inline: unset; page: unset; page-orientation: unset; paint-order: unset; perspective: unset; perspective-origin: unset; pointer-events: none; position-try: unset; position-visibility: unset; quotes: unset; r: unset; resize: unset; right: 6px; rotate: unset; ruby-align: unset; ruby-position: unset; rx: unset; ry: unset; scale: unset; scroll-behavior: unset; scroll-initial-target: unset; scroll-margin-block: unset; scroll-margin: unset; scroll-margin-inline: unset; scroll-padding-block: unset; scroll-padding: unset; scroll-padding-inline: unset; scroll-snap-align: unset; scroll-snap-stop: unset; scroll-snap-type: unset; scroll-timeline: unset; scrollbar-color: unset; scrollbar-gutter: unset; scrollbar-width: unset; shape-image-threshold: unset; shape-margin: unset; shape-outside: unset; shape-rendering: unset; size: unset; speak: unset; stop-color: unset; stop-opacity: unset; stroke: unset; stroke-dasharray: unset; stroke-dashoffset: unset; stroke-linecap: unset; stroke-linejoin: unset; stroke-miterlimit: unset; stroke-opacity: unset; stroke-width: unset; tab-size: unset; table-layout: unset; text-align: unset; text-align-last: unset; text-anchor: unset; text-box: unset; text-combine-upright: unset; text-decoration: unset; text-decoration-skip-ink: unset; text-emphasis: unset; text-emphasis-position: unset; text-indent: unset; text-overflow: unset; text-shadow: unset; text-transform: unset; text-underline-offset: unset; text-underline-position: unset; text-wrap: unset; timeline-scope: unset; top: 16px; touch-action: unset; transform: unset; transform-box: unset; transform-origin: unset; transform-style: unset; transition: opacity 0.2s ease-in-out, background 0.2s ease-in-out; translate: unset; user-select: unset; vector-effect: unset; vertical-align: unset; view-timeline: unset; view-transition-class: unset; view-transition-name: unset; visibility: unset; border-spacing: unset; -webkit-box-align: unset; -webkit-box-decoration-break: unset; -webkit-box-direction: unset; -webkit-box-flex: unset; -webkit-box-ordinal-group: unset; -webkit-box-orient: unset; -webkit-box-pack: unset; -webkit-box-reflect: unset; -webkit-line-break: unset; -webkit-line-clamp: unset; -webkit-mask-box-image: unset; -webkit-print-color-adjust: unset; -webkit-rtl-ordering: unset; -webkit-ruby-position: unset; -webkit-tap-highlight-color: unset; -webkit-text-combine: unset; -webkit-text-decorations-in-effect: unset; -webkit-text-fill-color: unset; -webkit-text-security: unset; -webkit-text-stroke: unset; -webkit-user-drag: unset; white-space-collapse: unset; widows: unset; width: unset; will-change: unset; word-break: unset; word-spacing: unset; x: unset; y: unset; z-index: unset;&quot;&gt;Copy&lt;/button&gt;
&lt;pre style=&quot;box-sizing: border-box; color: black; background-color: var(--color-code-bg); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1rem; line-height: 1.5rem; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 4; hyphens: none; margin: 10px 0px; direction: ltr; padding: var(--code-padding); border-radius: var(--code-border-radii);&quot;&gt;&lt;code class=&quot;language-bash&quot; style=&quot;box-sizing: border-box; font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace; color: #383a42; background: #fafafa; font-size: 0.9rem; line-height: 1.5; word-spacing: normal; word-break: normal; overflow-wrap: normal; tab-size: 2; hyphens: none; direction: ltr;&quot;&gt;# istio-proxy 파드에 envoy 컨테이너 admin 접속 포트 포워딩 설정
kubectl port-forward deployment/deploy-websrv 15000:15000 &amp;amp;

# envoy 컨테이너 admin 페이지 접속
open http://localhost:15000&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Kubernetes</category>
      <author>ManMan</author>
      <guid isPermaLink="true">https://gylee815.tistory.com/28</guid>
      <comments>https://gylee815.tistory.com/28#entry28comment</comments>
      <pubDate>Sat, 12 Apr 2025 21:03:45 +0900</pubDate>
    </item>
  </channel>
</rss>